【问题标题】:Sharing a Model among pages (views) in a Metro Style App在 Metro 风格应用程序中的页面(视图)之间共享模型
【发布时间】:2012-08-20 21:11:04
【问题描述】:

我有一个由多个页面组成的 Metro 应用程序,所有页面均源自 LayoutAwarePage。我已经实现了往返它们的导航。这就像一个魅力。我现在要做的是在这些视图之间共享公共数据,例如:

  • 访问模型,我们将其命名为 MyModel
  • 控制器实例,我们将其命名为 MyController
  • 常见的业务逻辑,我们命名为MyLogic

过去我习惯于通过构造函数“注入”这些依赖项。这现在不可能了(对吧?)。我怎么能这样做,否则请记住我想避免:

  • 单例(由于测试)
  • 公共静态属性(类似于单例)

可以将某种上下文对象传递给 Frame.Navigate() 方法吗?有人有好的建议吗?

附:我想避免使用像 MVVM light 或 Cocoon 这样的框架。

欢呼!

【问题讨论】:

  • 我不明白为什么你不能通过构造函数注入依赖?是什么阻碍了你?

标签: c# mvvm navigation singleton microsoft-metro


【解决方案1】:

听起来您正在寻找非常简单的东西。如果是这种情况,我会在 App.xaml.cs 中添加一个属性。

您可以使用 (App.Current as App).MyProperty 从应用程序中的任何位置设置/获取该属性。非常暴力,但它有效。

我也看到了相同的方法,但是将主容器分配给 App.xaml.cs 属性,然后是带有 getContainer() 方法的扩展方法 - 只是为了减少您必须编写的次数(App.Current作为应用程序)。

【讨论】:

  • 如上所述,这并不是我想要的。我想要一种简洁的方式来从每个视图中访问我的控制器/模型/逻辑而不将它们公开为公共静态变量或单例。
【解决方案2】:

好的,我想我找到了适合我的解决方案 [1]。它仍然不是我想要的,因为它使用了 MVVM 轻量级工具包及其 Messenger 概念 - 但它很干净。

[1]http://forums.silverlight.net/p/200771/468507.aspx

【讨论】:

  • slickthought.net/post/2011/04/26/… 如果你不想吃掉所有的 MVVMLight。如果您有兴趣在单个页面上的视图之间共享信息,那么 Messenger 的概念就很好。但是,如果根据您的描述,情况似乎是这样,您在恰好包含视图的页面之间传递数据,则不确定这会给您带来什么,而不是 App 的属性。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
相关资源
最近更新 更多