2012-10-23 80 views
4

我是遵循MVVM模式的新手。我正在使用MVVMLight。我想知道MVVM Light具有ViewModel的多個獨特實例。例如,我有一個應用程序可以打開n個窗口。每個使用相同的Viewmodel。我很好奇MVVM什麼是最好的賦予它們自己的實例。如何使用MVVM Light創建ViewModel的多個唯一實例?

如果我遵循MVVM Light示例,ViewModeLocator將只有一個靜態實例,每個窗口最終都會使用它。

在此先感謝。

+1

Laurent回答了一個類似的問題http://stackoverflow.com/a/2848084/762979 – keft

+0

MVVM模式並不僅限於視圖模型的一個實例。視圖模型就像任何其他類一樣,您可以根據需要創建該類的許多對象。 MVVM模式僅用於將業務邏輯與UI邏輯分開,以用於單元測試。就這些。任何其他以MVVM名義提出的聲明很可能是某種形式的錯誤理想主義的結果​​,而不是任何實際的常識理由。 – bugged87

回答

5

您沒有義務僅使用視圖模型定位器中的靜態視圖模型。只有您的視圖共享相同的視圖模型實例時,該方法纔有意義。對於您的場景,您只需新建視圖模型的實例並將其分配給您創建的每個窗口的DataContext屬性。

public void ShowChildWindow(Window parent) 
{ 
    var window = new WindowView(); 
    window.DataContext = new ViewModel(); 
    window.Show(); 
} 
8

簡單:

public EndingViewModel EndingViewModel 
{ 
    get 
    { 
     return ServiceLocator.Current.GetInstance<EndingViewModel>(Guid.NewGuid().ToString()); 
    } 
} 

當從服務定位器解決確保調用的GetInstance通過一個獨特的價值的方法。在上面的例子中,我通過了一個guid。

我真的不會手動構建您的對象,因爲這無法在MVVM Light中使用依賴注入容器。

相關問題