我是遵循MVVM模式的新手。我正在使用MVVMLight。我想知道MVVM Light具有ViewModel的多個獨特實例。例如,我有一個應用程序可以打開n個窗口。每個使用相同的Viewmodel。我很好奇MVVM什麼是最好的賦予它們自己的實例。如何使用MVVM Light創建ViewModel的多個唯一實例?
如果我遵循MVVM Light示例,ViewModeLocator將只有一個靜態實例,每個窗口最終都會使用它。
在此先感謝。
我是遵循MVVM模式的新手。我正在使用MVVMLight。我想知道MVVM Light具有ViewModel的多個獨特實例。例如,我有一個應用程序可以打開n個窗口。每個使用相同的Viewmodel。我很好奇MVVM什麼是最好的賦予它們自己的實例。如何使用MVVM Light創建ViewModel的多個唯一實例?
如果我遵循MVVM Light示例,ViewModeLocator將只有一個靜態實例,每個窗口最終都會使用它。
在此先感謝。
您沒有義務僅使用視圖模型定位器中的靜態視圖模型。只有您的視圖共享相同的視圖模型實例時,該方法纔有意義。對於您的場景,您只需新建視圖模型的實例並將其分配給您創建的每個窗口的DataContext屬性。
public void ShowChildWindow(Window parent)
{
var window = new WindowView();
window.DataContext = new ViewModel();
window.Show();
}
簡單:
public EndingViewModel EndingViewModel
{
get
{
return ServiceLocator.Current.GetInstance<EndingViewModel>(Guid.NewGuid().ToString());
}
}
當從服務定位器解決確保調用的GetInstance通過一個獨特的價值的方法。在上面的例子中,我通過了一個guid。
我真的不會手動構建您的對象,因爲這無法在MVVM Light中使用依賴注入容器。
Laurent回答了一個類似的問題http://stackoverflow.com/a/2848084/762979 – keft
MVVM模式並不僅限於視圖模型的一個實例。視圖模型就像任何其他類一樣,您可以根據需要創建該類的許多對象。 MVVM模式僅用於將業務邏輯與UI邏輯分開,以用於單元測試。就這些。任何其他以MVVM名義提出的聲明很可能是某種形式的錯誤理想主義的結果,而不是任何實際的常識理由。 – bugged87