MVVM问题,视图中的事件触发

时间:2010-07-12 12:33:49

标签: wpf mvvm

我是MVVM和WPF的新手。所以我很容易。

我在MVVM中有一个模型(模型A),在ViewModel中我有一个集合。 该集合存在于View of ListView中。 我有另一个模型(模型B - 不是ui模型),每次listview改变时都需要做一些事情。

如何在选择更改时提醒模型B?什么是正确方式?

  • 通过模型A(ViewModel)将触发的事件,模型B将捕获?
  • 通过模型A的附加属性?
  • 通过通知属性更改?
  • 通过从模型B发送继电器命令到模型A?

2 个答案:

答案 0 :(得分:1)

使用发布/订阅者模式

我个人会将命令从VM发送到VM并让他们更新Model

希望这会有所帮助

答案 1 :(得分:1)

我要么

  1. 在ViewModel中公开一个ViewModel B可以订阅的事件。然后我会在选择改变的任何时候提出该事件。
  2. 利用INotifyPropertyChanged向ViewModel B发送通知
  3. 我更喜欢选项1,因为它使您更加明显地想要做什么。此外,它更有效(你没有过滤代码的气味,哪些属性发生了变化,然后做了一些动作。)

    恕我直言,我认为中继命令只能用作视图和视图模型之间的接口,以帮助分离关注点。但是当你从一个类编程到一个类时,只需使用标准的OOP约定。

    所以伪代码可能看起来像这样:

    public class ViewModelA
    {
      public event EventHandler SelectedObjectChanged;
    
      public IList<MyObject> ObjectList {get;set;}
      public MyObject _SelectedObject;
      public MyObject SelectedObject
      {
        get { return _SelectedObject;}
        set 
        { 
          _SelectedObject = value; 
          if (SelectedObjectChanged != null) 
            SelectedObjectChanged(value); 
        }
      }
    }