【问题标题】:WPF MVVM Pattern, need to send objects from one viewmodel to another oneWPF MVVM Pattern,需要将对象从一个视图模型发送到另一个视图模型
【发布时间】:2016-03-19 18:19:51
【问题描述】:

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

牢记 mvvm 模式将这些集合转移到 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&lt;ObservableCollection&lt;Column&gt;&gt; PropertyViewModel.RetrieveFilters(Column) 返回类型错误

【问题讨论】:

  • 很明显的方法是在创建它们时将这些可观察对象注入到视图模型中

标签: c# wpf mvvm mvvm-light


【解决方案1】:

你的 messenger 方法很好,如果你使用 mvvm light ,你应该这样实现

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
          }
 } 

【讨论】:

  • 嘿,非常感谢!那行得通,我永远不会想出这个,几乎看起来倒退了,但效果很好。再次感谢
  • 不客气,它是跨多个视图模型处理对象的解决方案之一,如果项目要同时被两个或多个视图模型修改,您也可以将它们作为依赖项注入
猜你喜欢
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
相关资源
最近更新 更多