Обновить свойство объекта на основе других свойств - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь обновить свойство на основе значения из 2 других свойств.

Я использую INotifyPropertyChanged здесь.

Так что в основном у меня есть 3 свойства A, B и C. Свойство, которое я обновляю, здесь C на основе A и B. Я могу обновить значение свойства C с A и B. Таким образом, свойство C будет дополнением свойств A и B (C = A + B). Он отлично работает, когда передается одно значение из A или 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. Таким образом, свойство C будет дополнением свойств A и B (C = A + B). Надеюсь, это устранит путаницу?

1 Ответ

2 голосов
/ 28 мая 2019

Учитывая вышеприведенное пояснение, вы должны сделать что-то вроде:

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