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

Update an object Property based on other properties

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

我这里用的是INotifyPropertyChanged

所以基本上我有 3 个属性 ABC。我这里更新的 属性 是 C 基于 AB。我能够从 AB 更新 C 的 属性 值。所以 属性 C 将是 属性 AB (C = A + B) 的加法。当从 AB 传递一个值时,它工作正常,但是当传递两个属性的值时,它只接受最后传递的 属性 值的值。我知道当每个 属性 的值被传递时,我需要增加 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));
 }

更新

对于上面的混淆很抱歉,基本上我试图在 属性 AB 被传递时更新 属性 C 的值.所以 属性 C 将是 属性 AB (C = A + B) 的加法。希望这消除了困惑?

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

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));
 }