Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Изменить значение одного свойства из другого свойства

Добрый день!
Есть два поля 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"); }
Выделите общие подфункции в отдельные функции по вкусу.

Комментариев нет:

Отправить комментарий