C# Windows 8应用商店应用程序全局视图模型

C# Windows 8应用商店应用程序全局视图模型,c#,xaml,mvvm,windows-8,C#,Xaml,Mvvm,Windows 8,我目前正在开发一个应用程序,有一些“架构混乱” 我正在实现我自己的(非常简单的)MVVM模式,理想情况下它只有一个实例,并且大约每60秒更新一次 在Windows Phone 7中对以前的应用程序执行Xaml(Silverlight)时,我能够将ViewModel放入我的应用程序类(应用程序开始的位置),然后在完成初始加载过程后,我能够在整个应用程序中访问这个模型 我一直在搜索互联网站并下载教程/示例,看看是否有任何地方可以为Windows 8应用商店应用提供明确的答案 现在我想知道这是否是在W

我目前正在开发一个应用程序,有一些“架构混乱”

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

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

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

现在我想知道这是否是在Windows8商店应用程序中工作的正确方法

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

  • 在MainPage.cs文件中有ViewModel,然后在每个导航方法上,我都将ViewModel作为页面参数传递给下一个页面使用
  • 将ViewModel放在App.cs文件中,尝试了此操作,但似乎无法从任何其他页面访问此操作
  • 具有静态ViewModel类,该类保存应用程序的所有信息。没有看到任何其他项目/样本已经这样做了,所以我有点不愿意“脱离”规范并这样做
我相信这已经被考虑过了,在Windows 8应用商店应用程序中也有这样做的方法,但是我正在努力寻找一个明确的答案,我遇到的许多官方(MSDN)示例/教程并没有真正解决这个问题。许多示例似乎涵盖了可用API的非常小的方面

总而言之:我如何构建一个Windows 8应用商店应用程序,并拥有一个我所有页面都可以在整个应用程序中绑定/使用的ViewModel??这是否需要在应用程序和数据存储方式方面进行架构更改,或者是否有一种我错过的方法可以使我的ViewModel成为全局的


再次感谢:)

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

如果您确实希望在所有页面之间共享ViewModel,您可以尝试在ViewModel上使用静态“实例”属性(而不是静态类)

比如说,

public class MyViewModel
{
    private static MyViewModel instance;

    private MyViewModel()
    {
        // Private constructor
    }

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

            return instance;
        }
    }
}

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

如果您确实希望在所有页面之间共享ViewModel,您可以尝试在ViewModel上使用静态“实例”属性(而不是静态类)

比如说,

public class MyViewModel
{
    private static MyViewModel instance;

    private MyViewModel()
    {
        // Private constructor
    }

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

            return instance;
        }
    }
}