2015-05-08 35 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很好地集成,並且它在所有移動平臺上都得到支持。

相關問題