如何在容器ViewModel和包含ViewModel之间进行通信?

时间:2013-01-30 05:34:24

标签: c# wpf mvvm

请考虑以下代码

    class VMContainer:INotifyPropertyChanged
    {
    Type t;
    VMContained contained;

    public Type T
    {
        get
          {
               return this.t;
          }
        set
          {
               this.t = value;
               this.OnPropertyChanged("T");
          }
    }
    ........
    ........
    ........

    }

VMContainer和VMContained是两个ViewModel类。 现在,只要Container类属性T发生变化,我就需要更改成员实例“包含”的一个属性(比方说,P1)。我该怎么做? 请指教。

2 个答案:

答案 0 :(得分:3)

最简单的方法就是在T

的setter中设置值
public Type T
{
    get
      {
           return this.t;
      }
    set
      {
           this.t = value;
           contained.P1 = CalculateContainedValue();
           this.onPropertyChanged("T");
      }
}

<强>更新

public Type T1
{
    get
      {
           return this.t1;
      }
    set
      {
           this.t1 = value;
           contained.P1 = CalculateContainedValue();
           this.OnPropertyChanged("T1");
      }
}

public Type T2
{
    get
      {
           return this.t2;
      }
    set
      {
           this.t2 = value;
           contained.P1 = CalculateContainedValue();
           this.OnPropertyChanged("T2");
      }
}

private Type CalculateContainedValue()
{
    return /* Some combination of T1, T2, ... */ ;
}

答案 1 :(得分:0)

您可以使用EventAggregator。样本为here

否则你必须制作自己的发布子机制。