Предположим, что у меня есть простой класс Порядок, которые имеют вычисленное свойство 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"); в других свойствах. предложите решения лучше
Большое спасибо
Можно проверить, не следует ли поднять это событие и от любого другого члена, который может изменить значение, но делать это только в том случае, если вы действительно изменяете значение.
Вы могли бы инкапсулировать это в метод:
private void CheckTotalPrice(decimal oldPrice)
{
if(this.TotalPrice != oldPrice)
{
this.RaisePropertyChanged("TotalPrice");
}
}
Тогда вам нужно вызвать его из других членов, изменяющих значение:
var oldPrice = this.TotalPrice;
// mutate object here...
this.CheckTotalPrice(oldPrice);