INotifyPropertyChanged и вычисленное свойство

Предположим, что у меня есть простой класс Порядок, которые имеют вычисленное свойство TotalPrice, которое может быть связано с UI WPF

public class Order : INotifyPropertyChanged
{
  public decimal ItemPrice 
  { 
    get { return this.itemPrice; }
    set 
    {
       this.itemPrice = value;
       this.RaisePropertyChanged("ItemPrice");
       this.RaisePropertyChanged("TotalPrice");
    }
  }

  public int Quantity 
  { 
    get { return this.quantity; }
    set 
    {
       this.quantity= value;
       this.RaisePropertyChanged("Quantity");
       this.RaisePropertyChanged("TotalPrice");
    }
  }

  public decimal TotalPrice
  {
    get { return this.ItemPrice * this.Quantity; }    
  }
}

Действительно ли это - хорошая практика для вызова RaisePropertyChanged ("TotalPrice") в свойствах, которые влияют к вычислению TotalPrice? Что лучший способ состоит в том, чтобы обновить свойство TotalPrice? Другая версия, чтобы сделать это, конечно, должно изменить свойство как это

public decimal TotalPrice
{
    get { return this.ItemPrice * this.Quantity; } 
    protected set 
    {
        if(value >= 0) 
            throw ArgumentException("set method can be used for refresh purpose only");

    }
}

и назовите TotalPrice =-1 вместо этого. RaisePropertyChanged ("TotalPrice"); в других свойствах. предложите решения лучше

Большое спасибо

7
задан Arsen Mkrtchyan 10 February 2010 в 10:03
поделиться

1 ответ

Можно проверить, не следует ли поднять это событие и от любого другого члена, который может изменить значение, но делать это только в том случае, если вы действительно изменяете значение.

Вы могли бы инкапсулировать это в метод:

private void CheckTotalPrice(decimal oldPrice)
{
    if(this.TotalPrice != oldPrice)
    {
         this.RaisePropertyChanged("TotalPrice");
    }
}

Тогда вам нужно вызвать его из других членов, изменяющих значение:

var oldPrice = this.TotalPrice;
// mutate object here...
this.CheckTotalPrice(oldPrice);
4
ответ дан 6 December 2019 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: