2011-02-25 74 views
2

我試圖讓我的頭繞過mvvm,想出了一個測試應用程序,我認爲這會給我一個很好的基礎。假設我的申請有一項服務每分鐘發出一次,並在機場獲取最新的航班抵達和離境信息。現在假設我有3個不同的視圖:InboundView,OutboundView和GateView。 「入站」和「出站」視圖僅顯示入站和出站航班的各種航班詳細信息,我確信我們都已經在機場的飛行板上看到過。 GateView會顯示類似的航班信息,但可能會按照#號門而不是#號航班進行排序。常見/全局數據在mvvm中進行的位置?

因此,Flight對象的模型將包含航班數據詳細信息以及Gate對象的實例,一旦航班到達,該對象會進行適當更新。

因此,所有3個視圖都使用相同的航班數據服務,我知道我可以將該服務的一個實例傳遞給每個虛擬機,但之後我需要在每個視圖模型上連接相應的INPC事件,隨着觀看次數/虛擬視頻數量的增加而變得非常理想。

現在,每個虛擬機使用一個ListCollectionView包裹傳遞的航班數據集合,我只是根據入站/出站等進行排序/過濾。但我希望將服務結果合併到父類然後我可以處理所有的INPC,等等。在父級視圖模型級別的事件和那些會自動滴流到每個子視圖,如果數據在一個特定的航班改變(例如它的大門),而不是在每個虛擬機中單獨處理。

我已經研究了MVVM Light的Messenger框架,但它似乎仍然像每個子VM都必須註冊消息並單獨響應它。

這有道理嗎?我在正確的軌道上嗎?

回答

0

因此,所有3次都使用相同的飛行數據服務,我知道我可以通過該服務給每個VM實例,但然後我需要在每個視圖模型和對地掛上合適的INPC事件隨着觀看次數/虛擬視頻數量的增加,似乎並不理想。

你不一定要做到這一點,如果「服務」實現INotifyPropertyChanged。請記住,您可以綁定到屬性內的某個屬性,即:{Binding Path=FlightService.Gate}或其他任何可能有效的屬性。 (雖然這很難知道你的要求。)

我已經研究了MVVM Light的Messenger框架,但它似乎仍然像每個子VM都必須註冊該消息並響應它單獨。

是的,如果你想使用消息框架,你需要在每個ViewModel中處理這個。或者,您可以使用某種形式的服務地點或建設者注入來「拉入」航班服務。後者是我個人的偏好。

在每個虛擬機中處理這個問題的好處是每個虛擬機都可能想要處理一些有些不同的東西(否則,爲什麼會有一個以上?)。通過IoC提供對服務的引用,無論如何您都可以處理此問題。

相關問題