【问题标题】:Windows 8 Store App Global ViewModelWindows 8 应用商店应用全局视图模型
【发布时间】:2012-11-06 11:55:11
【问题描述】:

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

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

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

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

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

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

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

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

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

再次感谢:)

【问题讨论】:

    标签: c# xaml mvvm windows-8


    【解决方案1】:

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

    如果您真的想让您的 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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      相关资源
      最近更新 更多