MVVM:在ViewModels之间共享数据

Unf*_*ven 13 c# wpf design-patterns mvvm

如何在多个ViewModel之间共享数据?

例如,在应用程序中有一个名为Project的类.

    public class Project : ModelBase
{
    private string _projectName;

    public string ProjectName
    {
        get { return _projectName; }
        set
        {
            _projectName = value;
            RaisePropertyChanged(() => ProjectName);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在多个ViewModels应用程序中应该访问ActiveProject.
在ViewModels之间共享Project的最佳方法是什么?

  • 调解员模式?(消息)
  • 静态对象
  • 单身模式(如果是的话怎么样?)

我之前使用过Messaging但它需要很多编码.对于所有ViewModel,我要创建ActiveProject属性,还必须注册一个messenger来更新它.


我使用MVVM Light框架.
任何代码示例将不胜感激.

Ern*_*rno 7

我将创建一个ViewModel,作为所有Project ViewModel的父级.(我们称之为解决方案)

解决方案ViewModel将具有属性ActiveProject和可观察的项目集合.

  • @inside _"Singleton - 永远是首选解决方案"_,没有程序员说过:D (5认同)
  • 我以一种不同的方式解决了它.我有多个视图模型,它们都共享相同的ViewModelBase类,在ViewModelBase中我有Singleton的"Projects"列表,然后在我的View中我只是将绑定路径指定为childVM.Projects,所以它与哪个vm无关,它们将所有人共享同一个项目实例.这允许我每个DataContext有多个视图模型,并且不存在歧义. (3认同)
  • 但是……如果一个视图有多个视图模型,如何绑定这个共享属性? (2认同)
  • 和?这太含糊了! (2认同)

Kev*_*vin 5

我会推荐中介者模式。我以前在VM之间使用这种类型的消息传递使用EventAggregator,但实际上并没有太多。

  • 这确实应该是公认的答案。此外,似乎遇到这种反模式的人只构建了两层应用程序,而没有将模型作为第三层。 (2认同)