这可能是一个补救问题,但我的研究现在正在转动我(特别是作为Java开发人员)并查看几个不同的Rx包装器库。我想要的只是取ListView<MusicNote>.SelectedItem
并将其包装成IObservable
,发出当前单个选定值的流。这样做最简单的方法是什么?我应该使用ReactiveProperty,Rx-XAML还是某些库?或者有一个简单的内置方法来使用Rx.NET做到这一点?我宁愿不使用VS生成的传统事件方法存根。虽然我可以推动它的价值,但它感觉很乱,并不是我想要的范例。
this.keySelector.SelectedItem // turn this ListView's SelectedItem into an IObservable
答案 0 :(得分:1)
在Rx.Net中执行此操作的一种方法如下:
var whenSelectionChange = Observable.FromEventPattern(h => listView.SelectedIndexChanged += h,
h => listView.SelectedIndexChanged -= h)
.Select(_ => listView.SelectedItem);
基本上,FromEventPattern()从ListView触发的SelectedIndexChanged事件生成可观察序列。每次触发事件时都会调用Select(),因此您可以从列表中获取所选索引并将其返回。 whenSelectionChange将是IObservable<int>
,其中每个添加的元素都是新选择的索引。
我从未使用它,但您可以查看http://reactiveui.net/这是一个MVVM框架,似乎与RX.Net很好地集成,并且在所有移动平台上都支持它。
答案 1 :(得分:0)
感谢您的帮助。这最终是我最终做的。虽然我最初并不想这样做,但它似乎是最简单的。这是我工作的最终成果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)));
}