根据其他属性更新对象属性

时间:2019-05-28 15:53:46

标签: c# winforms inotifypropertychanged

我正在尝试根据其他2个属性的值来更新属性。

我在这里使用INotifyPropertyChanged

所以基本上我有3个属性ABC。我要更新的属性是基于CA的{​​{1}}。我可以从BC更新A的属性值。因此,属性B将是属性CA的加法(C = A + B)。当从BA传递一个值时,它工作正常,但同时传递了两个属性的值时,它仅取自最后传递的属性值。我知道当传递每个属性的值时,我需要增加B的值。但是实现这一目标的最佳方法是什么?

这是我的代码:

C

更新

对于上面的混乱,很抱歉,基本上我试图在传递属性private int? _a; public int? A { get => _a; set { _a = value; OnPropertyChanged($"A"); C = _a; } } private int? _b; public int? B { get => _b; set { _b = value; OnPropertyChanged($"B"); C = _b; } } private int? _c; public int? C { get => _c; set { _c = value; } } public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } C时更新属性A的值。因此,属性B将是属性CA的加法(C = A + B)。希望这能消除混乱吗?

1 个答案:

答案 0 :(得分:2)

鉴于上述说明,您要做的是:

private int? _a;
public int? A
{
   get => _a;
   set
   {
       if (value.HasValue != _a.HasValue || value.GetValueOrDefault(0) != _a.GetValueOrDefault(0))
       {
          _a = value;
          OnPropertyChanged();
          OnPropertyChanged(nameof(C));
       }
   }
 }

private int? _b;
public int? B
{
    get => _b;
    set
    {
       if (value.HasValue != _b.HasValue || value.GetValueOrDefault(0) != _b.GetValueOrDefault(0))
       {
          _a = value;
          OnPropertyChanged();
          OnPropertyChanged(nameof(C));
       }
    }
 }

 public int? C
 {
    get => A + B;
 }

 public event PropertyChangedEventHandler PropertyChanged;

 [NotifyPropertyChangedInvocator]
 protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
 {
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
 }