如何将 ListView SelectedItem 转换为 IObservable?
How do I convert a ListView SelectedItem into an IObservable?
这可能是一个补救性问题,但我的研究现在使我陷入了困境(尤其是作为 Java 开发人员)并查看了几个不同的 Rx 包装器库。我想要的只是获取一个 ListView<MusicNote>.SelectedItem
并将其包装到一个 IObservable
中,发出当前单个选定值的流。最简单的方法是什么?我应该使用 ReactiveProperty、Rx-XAML 还是某些库?或者是否有一种简单的内置方法可以使用 Rx.NET 执行此操作?我宁愿不使用 VS 生成的传统事件方法存根。虽然我可以在其中推动价值观,但感觉很乱,不是我想要的范例。
this.keySelector.SelectedItem // turn this ListView's SelectedItem into an IObservable
Rx.Net 中的一种方法如下:
var whenSelectionChange = Observable.FromEventPattern(h => listView.SelectedIndexChanged += h,
h => listView.SelectedIndexChanged -= h)
.Select(_ => listView.SelectedItem);
基本上,FromEventPattern() 从您的 ListView 触发的 SelectedIndexChanged 事件生成一个可观察的序列。每次触发事件时都会调用 Select() ,因此您可以从列表中获取选定的索引并 return 它。 whenSelectionChange 将是一个 IObservable<int>
,其中每个添加的元素都是新选择的索引。
我没用过,但你可以看看http://reactiveui.net/它是一个 MVVM 框架,似乎与 RX.Net 集成得很好,并且在所有移动平台上都受支持。
感谢大家的帮助。这就是我最终所做的。虽然我最初不想这样做,但它似乎是最简单的。这是我工作的最终产品 https://goo.gl/HTF3zd
private readonly ReplaySubject<TuningChangeEvent> tuningChange = new ReplaySubject<TuningChangeEvent>();
private void OneTuner_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) {
tuningChange.OnNext(TuningChangeEvent.tune(1,Convert.ToInt32(OneTuner.Value)));
}
这可能是一个补救性问题,但我的研究现在使我陷入了困境(尤其是作为 Java 开发人员)并查看了几个不同的 Rx 包装器库。我想要的只是获取一个 ListView<MusicNote>.SelectedItem
并将其包装到一个 IObservable
中,发出当前单个选定值的流。最简单的方法是什么?我应该使用 ReactiveProperty、Rx-XAML 还是某些库?或者是否有一种简单的内置方法可以使用 Rx.NET 执行此操作?我宁愿不使用 VS 生成的传统事件方法存根。虽然我可以在其中推动价值观,但感觉很乱,不是我想要的范例。
this.keySelector.SelectedItem // turn this ListView's SelectedItem into an IObservable
Rx.Net 中的一种方法如下:
var whenSelectionChange = Observable.FromEventPattern(h => listView.SelectedIndexChanged += h,
h => listView.SelectedIndexChanged -= h)
.Select(_ => listView.SelectedItem);
基本上,FromEventPattern() 从您的 ListView 触发的 SelectedIndexChanged 事件生成一个可观察的序列。每次触发事件时都会调用 Select() ,因此您可以从列表中获取选定的索引并 return 它。 whenSelectionChange 将是一个 IObservable<int>
,其中每个添加的元素都是新选择的索引。
我没用过,但你可以看看http://reactiveui.net/它是一个 MVVM 框架,似乎与 RX.Net 集成得很好,并且在所有移动平台上都受支持。
感谢大家的帮助。这就是我最终所做的。虽然我最初不想这样做,但它似乎是最简单的。这是我工作的最终产品 https://goo.gl/HTF3zd
private readonly ReplaySubject<TuningChangeEvent> tuningChange = new ReplaySubject<TuningChangeEvent>();
private void OneTuner_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) {
tuningChange.OnNext(TuningChangeEvent.tune(1,Convert.ToInt32(OneTuner.Value)));
}