У вас есть связь между двумя свойствами в вашей модели представления.Представлению не нужно ничего знать об этой связи.Если вы измените скорость в пользовательском интерфейсе, привязка распространит это значение обратно в модель представления.Но теперь у вас есть несоответствие: скидка неправильная.
Модель представления может обеспечивать любые требуемые отношения между открытыми им свойствами, если она должным образом уведомляет подсистему привязки о любых изменениях свойств.Поэтому, чтобы справиться с этим случаем, просто измените установщик в view-модели для тарифа, чтобы он устанавливал ставку как обычно , но также устанавливал новую скидку .Затем создайте уведомление свойства для обоих свойств.Теперь модель представления снова соответствует.Аналогично, но наоборот, когда вы меняете скидку.
Вот примитивная модель представления, которая демонстрирует этот подход:
public class DiscountViewModel : INotifyPropertyChanged
{
private double total;
private double rate;
private double discount;
public double Total
{
get { return total; }
set { total = value; OnPropertyChanged("Total"); }
}
public double Rate
{
get { return rate; }
set
{
rate = value;
discount = total * rate;
OnPropertyChanged("Rate");
OnPropertyChanged("Discount");
}
}
public double Discount
{
get { return discount; }
set
{
discount = value;
rate = discount / total;
OnPropertyChanged("Rate");
OnPropertyChanged("Discount");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}