我一直在研究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,卸载视图时不必处理它...因为您有一个对它的引用,您可以根据任意触发器(即使在卸载视图后)选择丢弃它(如果有的话)字典中视图模型的“关键”。 –