2015-10-20 17 views
2

我有一個使用MVVM模式編寫的跨平臺項目(沒有使用特定的框架,只是自編寫的實現)。項目有幾個獨立的模塊,每個模塊都有幾個頁面。每個頁面都有ViewModel和某種負責數據導向邏輯(獲取,保存,刪除,轉換等)的管理者。因此,數據流看上去只有這個:使用MVVM中的Rx跟蹤收集更改

VM - >管理 - >服務 - >管理 - > VM

當虛擬機裝載它要求經理數據。 Manager執行服務調用,獲取數據,從DTO構建模型集合,將此集合返回到ViewModel,ViewModel將模型集合轉換爲要在列表中呈現的ViewModels集合 。

現在我正在尋找一種方法來實現這種使用Rx的邏輯。大多數頁面有一個要編輯的主要列表(項目插入,刪除,修改)和多個支持集合(某些組合框的提供者可從中選擇值)。 支持集合可以通過標準異步/等待調用或通過將任務轉換爲Rx輕鬆檢索 - 它們不成問題。但是可以修改的列表是。 我只是無法弄清楚如何在不破壞Rx邏輯的情況下跟蹤頁面整個生命週期的變化。 我有選擇訂閱:

  • IEnumerable<Model>
  • Task<IEnumerable<Model>>
  • IObservable<IEnumerable<Model>>

,但我想我有認購IObservable<Model>因爲我需要一種方法來跟蹤個人的變化。 我需要一種方法來從其他方法(如添加,刪除或編輯)修改此集合。 因此,我應該通過Observable.Create(或其他方法)創建IObservable並將IObserver存儲在Manager的某處,以在其他方法中調用OnNextOnError?但它看起來不像一個Rx-way-to-do。 你對我的問題有什麼建議嗎?任何意見讚賞。謝謝。你可能會說Rx不是解決跟蹤可修改列表問題的最佳方法,因爲它不是無盡的事件流,而且我必須自己推動修改,但是Rx具有非常方便的過濾數據和處理方式錯誤,所以我真的很期待在應用程序中實現它。

回答

1

ReactiveList的作品,雖然它沒有任何暴露的單個Rx流提供所有修改事件。

請參閱this相關問題,其答案是使用IObservable<IObservable<Model>>,每個內部可觀察項代表您的列表中的一個項目及其修改(以及刪除 - 完成時)。