0

我目前正在开发一个应用程序,并且遇到了一些“架构混乱”。

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

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

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

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

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

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

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

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

再次感谢 :)

4

1 回答 1

3

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

如果您真的想让您的 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;
        }
    }
}
于 2012-11-21T13:04:00.320 回答