【问题标题】:What is the best/recommended way to share a Model across ViewModels in WPF?在 WPF 中跨 ViewModel 共享模型的最佳/推荐方式是什么?
【发布时间】:2016-02-12 15:14:57
【问题描述】:

我有一个带有多个 ViewModel 的 WPF 应用程序。其中一些 ViewModel 还具有其他 ViewModel 的 Observable 集合。我想使用单个对象(或对象列表)作为模型,并且我的应用程序中的所有 ViewModel 都需要访问它。最简单的方法可能是传递对每个视图模型的引用,但我认为这不是最好的方法。或者,我可以将模型声明为静态实例。这些解决方案似乎有点奇怪,也不优雅。我在想也许我可以使用 MVVM Light 并将我的模型在 SimpleIoc 中注册为:

SimpleIoc.Default.Register<myModel>();

然后每个模型都可以通过调用来访问这个实例:

var model = ServiceLocator.Current.GetInstance<myModel>();

这是一个好主意还是有更好的方法可以从每个 ViewModel 访问模型? ps:我不想使用依赖注入。对于我的小型应用程序来说,这太过分了。

【问题讨论】:

  • 通常我会以某种方式设计视图模型,使它们中的每一个只代表完整数据模型的一小部分。然后,您可以将完整数据模型的所需子部分传递给相应的视图模型。但是单个视图模型不应该知道“所有数据”。
  • 在这种情况下使用 IoC 听起来是一个非常合乎逻辑的解决方案。
  • 您使用 IoC 的解决方案非常有效且很好

标签: wpf c#-4.0 design-patterns mvvm mvvm-light


【解决方案1】:

您如何为您的模型创建一个单独的类库项目。这样,您只需引用类库项目即可轻松共享模型,该类库项目在任何需要模型的项目中只有模型,例如包含 ViewModel 的项目。关键是,模型和视图模型可以分别存在于单独的类库项目中。

【讨论】:

  • 在 viewModels 和模型中组织项目不是问题。要求是 ViewModel 可以访问相同的数据、相同的实例。
  • 您可以使用静态字段或属性,或者创建单例,但请记住让您的应用程序线程安全。
猜你喜欢
  • 2010-09-07
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2010-10-31
  • 1970-01-01
相关资源
最近更新 更多