2015-05-08 33 views
1

这可能是一个补救问题,但是我的研究现在正在围绕着我(特别是作为Java开发人员)和看几个不同的Rx包装库。我只需要一个ListView<MusicNote>.SelectedItem并将其包装到IObservable中,发出当前单个选定值的流。什么是最简单的方法来做到这一点?我应该使用ReactiveProperty,Rx-XAML还是某个库?或者有没有一种简单的内置方式来与Rx.NET做到这一点?我宁愿不使用VS生成的传统事件方法存根。虽然我可以推动价值观,但感觉混乱,而不是我想要的范例。如何将ListView SelectedItem转换为IObservable?

this.keySelector.SelectedItem // turn this ListView's SelectedItem into an IObservable

+2

这听起来像一个很酷的事业。我的私人路线是将监听者分配给SelectedIndexChanged事件。 https://msdn.microsoft.com/en-us/library/system.windows.forms.listview.selectedindexchanged%28v=vs.110%29.aspx – Gandalf458

+0

请花一些时间编写一些代码,它提供了一个基本示例你想要做什么,以便我们有一些工作。你不应该指望我们从头开始编写代码。让你的问题很容易回答,你会增加获得良好答案的机会。 – Enigmativity

+0

我在添加一些细节,我正在努力通过它@ Gandalf458谢谢,我现在正在查看链接。是的,这是一个我很兴奋的Windows 8.1应用程序。这是一款由音乐理论算法驱动的吉他音阶应用程序。这是使用响应式编程的理想项目,因为有很多状态管理对用户输入(比例尺更改,键更改,和弦更改和调整更改)做出反应。当这四个变量被修改时,所有事情都需要重新计算。 – tmn

回答

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))); 
     } 
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很好地集成,并且它在所有移动平台上都得到支持。

相关问题