Windows 8 Store App全局ViewModel

时间:2012-11-06 11:55:12

标签: c# xaml mvvm windows-8

我目前正在开发一款应用,并且遇到了一些“架构混淆”。

我正在实现我自己的(非常简单的)MVVM模式,理想情况下,它只有一个实例,并且每60秒更新一次。

在以前的应用程序中使用Windows Phone 7中的Xaml(Silverlight)时,我能够将ViewModel放入我的App类(应用程序开始的位置),然后我可以在整个应用程序中访问这个模型初始加载过程已经完成。

我一直在搜索互联网并下载教程/示例,看看是否有任何地方可以为Windows 8商店应用提供明确的答案。

现在我想知道这是否是在Windows 8商店应用程序中正常工作的方式?

以下是我探索过的几种工作方式:

  • 将ViewModel放在MainPage.cs文件中,然后在每个导航方法中,我一直将ViewModel作为页面参数传递给下一页使用。
  • 在App.cs文件中使用ViewModel,试过这个,但似乎无法从任何其他页面访问它
  • 拥有一个静态ViewModel类,它包含应用程序的所有信息。没有看到任何其他项目/样本已经这样做,所以我有点不愿意“脱离”规范并做到这一点。

我确信这已被考虑过,并且有一种方法可以在Windows 8商店应用程序中执行此操作,但是我正在寻找一个明确的答案以及我拥有的许多官方(MSDN)示例/教程遇到的并没有真正解决这个问题。许多样本似乎涵盖了可用API的非常小的方面。

总结:如何构建Windows 8商店应用程序并拥有一个ViewModel,我可以在整个应用程序中绑定/使用所有页面?这是否需要在应用程序方面进行体系结构更改以及数据的存储方式,还是有一种我错过的方式可以使我的ViewModel全局化?

再次感谢:)

1 个答案:

答案 0 :(得分:3)

通常,大多数应用程序为每个页面使用不同的视图模型,因此您不经常看到具有共享视图模型的示例。为每个视图使用单独的视图模型(使用页面特定的代码),但使用共享数据模型可能会更好。

如果您真的希望在所有页面之间共享ViewModel,可以在ViewModel上尝试静态的“Instance”属性(而不是静态类)。

例如,

public class MyViewModel
{
    private static MyViewModel instance;

    private MyViewModel()
    {
        // Private constructor
    }

    public static MyViewModel Instance
    {
        get
        {
            if (instance == null)
                instance = new MyViewModel();

            return instance;
        }
    }
}