WPF MVVM Pattern,需要将对象从一个viewmodel发送到另一个viewmodel

时间:2016-03-18 13:05:02

标签: c# wpf mvvm mvvm-light

您好我在Viewmodel中有3个自定义类型的ObservableCollections称之为ViewmodelA,我需要将这些集合发送到ViewmodelB。我尝试使用MessengerInstance注册一个返回3个ObservableCollections列表的方法,但它抱怨它期望返回类型为void。

记住mvvm模式,将这些colllections转移到ViewModelB的最佳方法是什么?

顺便说一句,我使用的是mvvm-light

这是我返回列表的方法:

private List<ObservableCollection<Column>> RetrieveFilters(Column col)
{
    List<ObservableCollection<Column>> Out = new     List<ObservableCollection<Column>>
    {
        _manuColumns,
        _pnColumns,
        _nounModColumns
    };

    return Out;
}

然后我尝试用

注册方法
 MessengerInstance.Register<Column>(this, RetrieveFilters);

我得到的错误是

  

List<ObservableCollection<Column>> PropertyViewModel.RetrieveFilters(Column)   有错误的返回类型

1 个答案:

答案 0 :(得分:2)

你的信使方法很好,如果你使用mvvm灯,你应该像这样实现

class MyMessage
 {

      ObservableCollections col1 {get;set;}
      ObservableCollections col2 {get;set;}
      ObservableCollections col3 {get;set;}

    public MyMessage(ObservableCollections col1, ObservableCollections col2, ObservableCollections col3)
    {
       this.Col1 = col1;
       this.Col2 = col2;
       this.Col3 = col3;
     }
 }

class viewmodelA
 {
    void someFunc()
     {
       Messenger.Default.Send(new MyMessage (collection1, collection2, collection3);
     }
 }

class viewmodelB
 {
      viewmodelB()
      {
        Messenger.Default.Register<MyMessage > (this, message => DoSomething(message);
      }

      public void DoSomething(MyMessage message)
         {
             //use your collections
          }
 }