如何在容器视图模型和包含的视图模型之间执行通信

本文关键字:视图 模型 之间 执行 通信 包含 | 更新日期: 2023-09-27 17:56:41

请考虑以下代码

    class VMContainer:INotifyPropertyChanged
    {
    Type t;
    VMContained contained;
    public Type T
    {
        get
          {
               return this.t;
          }
        set
          {
               this.t = value;
               this.OnPropertyChanged("T");
          }
    }
    ........
    ........
    ........
    }

VMContainer 和 VMContained 是两个 ViewModel 类。现在,每当容器类属性 T 更改时,我需要更改成员实例的一个属性(例如 P1)。我应该怎么做?请指教。

如何在容器视图模型和包含的视图模型之间执行通信

最简单的方法是在setter中为T设置值:

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, ... */ ;
}

您可以使用 EventAggregator。样品在这里。

否则,您必须制作自己的pub子机制。