Как выполнить привязку данных WPF, если два значения TextBox зависят друг от друга (Discount Amount и Discount Percentage) - PullRequest
1 голос
/ 27 июня 2011

У меня есть общая сумма, сохраненная в некоторой переменной, два текстовых поля,

  1. Процент скидки
  2. Сумма скидки

, которая должна быть рассчитана как переменная суммы формыЯ хочу, чтобы эффект был таким, как если бы я изменил процент, тогда сумма скидки должна отражаться, а если я изменил сумму скидки, процент должен отражаться с помощью привязки данных в WPF

.

1 Ответ

2 голосов
/ 27 июня 2011

У вас есть связь между двумя свойствами в вашей модели представления.Представлению не нужно ничего знать об этой связи.Если вы измените скорость в пользовательском интерфейсе, привязка распространит это значение обратно в модель представления.Но теперь у вас есть несоответствие: скидка неправильная.

Модель представления может обеспечивать любые требуемые отношения между открытыми им свойствами, если она должным образом уведомляет подсистему привязки о любых изменениях свойств.Поэтому, чтобы справиться с этим случаем, просто измените установщик в 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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...