我一直在研究MVVM模式,並將其付諸實施在Windows Phone 8應用程序中,並且我有一個關於初始化和訪問ViewModels的最佳實踐的問題應用程序。Windows Phone 8 - MVVM ViewModels和App.xaml.cs
當我從WP8 SDK的模板創建一個數據綁定應用程序,我注意到在此代碼App.xaml.cs文件:
public static MainViewModel ViewModel
{
get
{
// Delay creation of the view model until necessary
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
// Ensure that application state is restored appropriately
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
從我個人理解,這意味着,App類包含作爲靜態成員的MainViewModel,並且當應用程序被激活時,ViewModel被加載。
既然如此,我有以下問題:
如果我的應用程序有幾個的ViewModels,將所有的人都將被存儲爲App.xaml.cs文件中的成員?
如果每個ViewModel的數據都在同一時間加載,我該如何管理我的應用程序的內存?是否有可能卸載每個ViewModel的數據,只加載我的View正在使用的ViewModel?
很好的答案,非常感謝!並且引用也很好:) 想知道,如果我要採用這種方法,如果我不希望它們在不使用時佔用太多內存,從ViewModels中卸載數據的最佳方法是什麼? – miguelarcilla
我認爲一種選擇是在ViewModel中實現IDisposable並在離開視圖時處理它。 – anderZubi
展開andersZubi的答案,我喜歡創建一個表示應用程序當前狀態的單例,並且具有Dictionary類型的屬性。每個需要視圖模型的頁面或控件,首先在字典中查找,然後在它不存在的情況下創建它,然後將viewModel添加到Dictionary中。然後,如果它是IDisposable,卸載視圖時不必處理它...因爲您有一個對它的引用,您可以根據任意觸發器(即使在卸載視圖後)選擇丟棄它(如果有的話)字典中視圖模型的「關鍵」。 –