Привязка значения DataContext, на которое влияет другое свойство - PullRequest
0 голосов
/ 19 июня 2020

Я создал класс для контекста данных

public class Amt
{            
    private double _Amount = 0;
    public double Amount
    {
        get { return _Amount; }
        set { _Amount = value; }
    }   

    private double _RedeemAmount = 0;
    public double RedeemAmount
    {
        get { return _RedeemAmount; }
        set
        {
            _RedeemAmount = value;            
        }
    }

    private double _BalAmount = 0;
    public double BalAmount
    {
        get { return Amount - RedeemAmount; }
    }
}

И я привязал его к TextBox в XAML

<TextBox Name="txtAmount" Text="{Binding Amount}" FontSize="16" Margin="0,0,0,2"/>
<TextBox Name="txtRedeemAmount" Text="{Binding RedeemAmount,Mode=TwoWay}" FontSize="16" Margin="0,0,0,2" TextChanged="TxtRedeemAmount_TextChanged"/>
<TextBox Name="txtBalAmount" Text="{Binding BalAmount}" FontSize="16" Margin="0,0,0,2"/>

Тогда я хочу, чтобы я изменил Redeem Сумма в событии TextChanged, я ожидаю, что сумма баланса тоже должна измениться, я провел некоторое исследование и попробовал код на нем, но он просто не работает. Я сделал это неправильно? Есть ли другие способы сделать это лучше?

private void TxtRedeemAmount_TextChanged(object sender, EventArgs e)
  {
    double amt = 0;
    double.TryParse(txtRedeemAmount.Text, out amt);
    Amt.RedeemAmount = amt;
   }

Все равно спасибо за помощь !!!

1 Ответ

0 голосов
/ 19 июня 2020

Чтобы выполнить sh то, что вы хотите, вам необходимо реализовать интерфейс INotifyPropertyChanged. Каждый раз, когда свойство класса изменяется, вы должны запускать событие PropertyChanged.

using System.ComponentModel;

public class Amt : INotifyPropertyChanged
{
    private double _Amount = 0;
    public double Amount
    {
        get { return _Amount; }
        set 
        { 
            _Amount = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Amount)));
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(BalAmount)));
        }
    }

    private double _RedeemAmount = 0;
    public double RedeemAmount
    {
        get { return _RedeemAmount; }
        set
        {
            _RedeemAmount = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(RedeemAmount)));
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(BalAmount)));
        }
    }

    private double _BalAmount = 0;

    public double BalAmount
    {
        get { return Amount - RedeemAmount; }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
...