Добрый день!
Есть два поля textbox для ввода стоимости и скидки. Общая сумма пусть будет 1000. При вводе значения в поле стоимости должно меняться значение в поле скидки. И наоборот, при вводе скидки меняется значение стоимости.
В xaml файле сделал привязку к свойствам:
Сами свойства описал следующим образом:
public double? TotalBalance
{
get
{
if (_totalbalance.GetValueOrDefault() == 0)
{
_totalbalance = 1000;
}
return _totalbalance;
}
set
{
_totalbalance = value;
RaisePropertyChanged("TotalBalance");
Discount = 1000 - value;
}
}
public double? Discount
{
get
{
if (_discount.GetValueOrDefault() == 0) {
_discount = 0;
}
return _discount;
}
set
{
_discount = value;
RaisePropertyChanged("Discount");
TotalBalance = 1000 - value;
}
}
В результате получается зацикливание, т.к. одно свойство меняет второе, а второе сразу же меняет первое и понеслось..
Подскажите в какую сторону думать. Какое дополнительное условие нужно выполнить и каким образом. Желательно используя паттерн MVVM, т.к. пытаюсь его изучить.
Заранее спасибо!
Ответ
Например, так:
public double TotalBalance
{
get { return _totalbalance ?? 1000; }
set
{
_totalbalance = value;
RecalculateDiscountFromBalance();
RaisePropertyChanged("TotalBalance");
}
}
public double Discount
{
get { return _discount ?? 0; }
set
{
_discount = value;
RecalculateBalanceFromDiscount();
RaisePropertyChanged("Discount");
}
}
void RecalculateDiscountFromBalance()
{
_discount = 1000 - TotalBalance;
RaisePropertyChanged("Discount");
}
void RecalculateBalanceFromDiscount()
{
_totalBalance = 1000 - Discount;
RaisePropertyChanged("TotalBalance");
}
Выделите общие подфункции в отдельные функции по вкусу.
Комментариев нет:
Отправить комментарий