在视图之间共享视图模型并使用EventAggregator

时间:2018-02-09 11:35:45

标签: c# wpf mvvm viewmodel eventaggregator

我有一个系统(使用Prisim和MVVM),它有许多用于收集数据的视图。每个View都有自己的ViewModel,它当前将数据发送到公共数据类。 我一直在尝试(没有成功)创建一个ViewModel,可以被所有这些视图用来保存不断更新公共数据类。 但是我遇到了困难,因为我的共享ViewModel需要使用EventAggregator。我的共享ViewModel的构造函数有(IEventAgreggator eventAggregator)作为参数。但是,当我尝试使用以下方法将我的视图绑定到此时

    <UserControl.DataContext>
        <vm:DataViewModel/>
    </UserControl.DataContext>

我收到错误

  

&#34; DataViewModel不包含带有1个参数的构造函数&#34;

。有没有解决的办法?如果我使用autowire,我不会遇到这个问题,但似乎无法以这种方式在Views之间共享ViewModel。这是我的第一篇文章,如果这是一个愚蠢的问题,请道歉。谢谢

2 个答案:

答案 0 :(得分:0)

通常在基于PRISM的应用程序中,我们在容器中注册ViewModels,以便可以通过DI容器自动解析它们。

您需要确保在Module Initialize方法中在容器中注册新创建的ViewModel类型。

我们的应用中通常包含Unity容器,我们必须在模块Initialize方法中执行以下操作。

Container.RegisterType<DataViewModel >(new ContainerControlledLifetimeManager());

希望它有帮助!

答案 1 :(得分:0)

请尝试以下代码。

public Myusercontrol ()
{
     InitializeComponent();
     DataViewModel vm = new DataViewModel (eventAggregator);
     this.DataContext = vm;
}