C# Windows Phone 8-MVVM ViewModels和App.xaml.cs
我一直在研究MVVM模式,并将其应用于Windows Phone 8应用程序中,我有一个关于在应用程序中初始化和访问ViewModels的最佳实践的问题 当我从WP8 SDK模板创建数据绑定应用程序时,我注意到App.xaml.cs文件中有以下代码:C# Windows Phone 8-MVVM ViewModels和App.xaml.cs,c#,mvvm,windows-phone-8,viewmodel,C#,Mvvm,Windows Phone 8,Viewmodel,我一直在研究MVVM模式,并将其应用于Windows Phone 8应用程序中,我有一个关于在应用程序中初始化和访问ViewModels的最佳实践的问题 当我从WP8 SDK模板创建数据绑定应用程序时,我注意到App.xaml.cs文件中有以下代码: public static MainViewModel ViewModel { get { // Delay creation of the view model until necessary if
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有许多不同的方法。其中一些将在启动时实例化所有视图,而另一些则在需要时才实例化ViewModel 在以下博客文章中,您将发现一些实例化ViewModel的可能方法: 回答你的问题;1.-按照您的方法,您必须在App.xaml.cs文件中为所有ViewModels定义成员。2.-您可以采用在需要之前不实例化ViewModel的方法
有一些工具包,比如or,可以简化MVVM模式的实现。我个人使用,它使用定位器方法。使用此工具包,默认情况下,ViewModels会在需要时加载,但您可以将其设置为在启动时加载特定的ViewModel,这在某些情况下非常有用。回答得很好,非常感谢!参考资料也很好:)只是想知道,如果我采用这种方法,如果我不想让ViewModels在不使用时占用太多内存,那么从ViewModels中卸载数据的最佳方法是什么?我认为一种选择是在ViewModel中实现IDisposable,并在离开视图时进行处理。展开andersZubi的回答,我想创建一个代表应用程序当前状态的单例,并且具有Dictionary类型的属性。每个需要视图模型的页面或控件,首先查找字典,然后在它还不存在时创建它,并将视图模型添加到字典中。然后,如果它是IDisposable,您不必在卸载视图时处理它。。。因为您有一个对它的引用,所以如果字典中有视图模型的“键”,您可以选择基于任意触发器(即使在卸载视图之后)来处理它。