7

我一直在研究 MVVM 模式并在 Windows Phone 8 应用程序中将其付诸实践,我有一个关于在应用程序中初始化和访问 ViewModel 的最佳实践的问题。

当我从 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。

既然如此,我有以下问题:

  1. 如果我的应用有多个 ViewModel,它们是否都将作为成员存储在App.xaml.cs文件中?

  2. 如果同时加载每个 ViewModel 的数据,我该如何管理我的应用程序的内存?是否可以卸载每个 ViewModel 的数据并仅加载我的 View 正在使用的 ViewModel?

4

1 回答 1

8

实例化 ViewModel 有许多不同的方法。其中一些将在启动时全部实例化,而另一些则在需要时才实例化 ViewModel。

在以下博客文章中,您将找到一些实例化 ViewModel 的可能方法:

MVVM 实例化方法

回答您的问题;1.- 按照您的方法,您必须在App.xaml.cs文件中为所有 ViewModel 定义成员。2.- 您可以采用一种在需要时才实例化 ViewModel 的方法。

存在一些工具包,例如MVVM LightCaliburn Micro,可以简化 MVVM 模式的实现。我个人使用MVVM Light Toolkit,它使用 Locator 方法。使用此工具包,默认情况下会在需要时加载 ViewModel,但您可以将其设置为在启动时加载特定的 ViewModel,这在某些场景中可能很有用。

于 2013-09-24T08:42:25.970 回答