通知计算财产的变化

bay*_*est 2 c# wpf notify

在这个网站上有类似的问题,但我没有找到真正有效的答案,所以我再次发布.

public MyClass
{

   public person Person1 {get; set;}

   public person Person2 {get; set;}

  CalculatedProperty 
   { 
     get
     { return Person1.Salary + (Person2.Salary/2) ; }
   }

}

public class Person
{
  public double Salary
    { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在CalculatedProperty任何时候Person1.Salary和/或Person2.Salary更改时通知更改.

我曾尝试添加OnPropertyChanged("CalculatedProperty")上的制定者Person1Person2,但它不工作(我明白为什么),但无法找到一个方法来更改通知.请帮忙=)

(有没有办法使用ObjectDataProvider它?...一直在尝试...)

CKI*_*KII 6

您也需要Person实现INotifyPropertyChanged,然后注册到您拥有的两个属性.在其中任何一个上PropertyChanged调用一次Salary,调用PropertyChangedonCalculatedProperty

void PersonPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if(e.PropertyName == "Salary")
        OnPropertyChanged("CalculatedProperty");
}
Run Code Online (Sandbox Code Playgroud)

只要记得在人员被更改时取消注册.

更新:

正如吉姆所说,你的二传手应该是这样的:

private Person _person;
public Person Person
{
    get { return _person; }
    set
    {
        if (Equals(value, _person)) return;

        if (_person != null)
            _person.PropertyChanged -= PersonPropertyChanged;

        _person = value;

        if(_person != null)
            _person.PropertyChanged += PersonPropertyChanged;

        OnPropertyChanged("Person");
    }
}
Run Code Online (Sandbox Code Playgroud)