2011-07-14 110 views
1

請,你有什麼建議是最好的(在建築質量方面)的方式來以下情形:模型視圖到模型視圖通信

ModelViewA(父) - 需要從ModelViewB收集來顯示數據 - 訪問採集多次即使收集保持不變

ModelViewB(子) - 保存項目的集合。這個集合在概念上屬於ModelViewB,並且主要在這個(模型)視圖中被修改。但是,ModelViewA也可以修改集合

我現在採用的方法是在ModelViewB中進行集合,在ModelViewA中進行復制。使用消息傳遞總線(MMVM Light toolkit)我有ModelViews通知對方這一變化。然而,這讓我覺得很尷尬,因爲我保留了重複的集合並同步它。我寧願只在一個地方,並從ModelViewA和B訪問它。 我想也許注入一個ModelView到另一個,但這會增加耦合,並且一般感覺MVVM模式錯誤。我也可以對兩個ModelView使用靜態引用,因爲我擁有靜態定位器(也來自MVVM Light工具包),它包含引用。 或者也許有更好的解決方案?

感謝,

Ø

回答

0

我(在某種程度上)這樣做的現在。

我有一個ConsoleViewModel,它記錄和存儲執行的事件,以顯示在我的ConsoleView的UI中。當然,我的ViewModel希望與這個控制檯通信以記錄他們的事件。

爲了做到這一點,我創建了一個接口,它公開了我的ViewModel可以用來將他們的事件寫入控制檯的方法。

public interface IConsole 
{ 
    void Info(string message); 
    void Info(string messageFormat, params object[] args) 
    // etc 
} 

我ConsoleViewModel實現了這個接口,和所有其他的ViewModels揭露他們使用寫入控制檯類型IConsole的公共財產。

在這樣做的過程中,您可以使用許多合成ViewModel的方法。您可以使用DI或簡單的服務定位器,或者(如我所做的那樣),在資源中定義它們。

<Application.Resources> 
    <ConsoleViewModel x:Key="ConsoleViewModel" /> 
    <DerpViewModel x:Key="Derp" 
     Console="{StaticResource ConsoleViewModel}" /> 
    <!--etc-->  
</Application.Resources>