INotifyPropertyChanged更新ontextchange

Ton*_*Nam 3 c# wpf inotifypropertychanged

我的wpf应用程序中有以下绑定

XAML:

   <TextBox Text="{Binding Amount, StringFormat=c}" Name="txtAmount"  />
Run Code Online (Sandbox Code Playgroud)

c#(代码背后):

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();

        // needed to create the binding  
        this.DataContext = this;
    }

    private decimal _Amount;

    public decimal Amount
    {
        get {
            return _Amount;
        }
        set{
            _Amount= value;
            OnPropertyChanged("Amount");             
        }
    }


    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

   //.....
Run Code Online (Sandbox Code Playgroud)

该代码工作正常.每当我更改txtAmount的值时,我的代码中的属性Amount都会更新,反之亦然(更改C#中Amount的值将更新txtAmount)

无论如何,每次更改控件txtAmount中的文本时,如何更新金额?我不想等到txtAmount失去焦点,以便Amount得到更新后面的代码.


我尝试过的事情:

        txtAmount.TextChanged += (a, b) =>
        {
            Amount = decimal.Parse(txtAmount.Text);
        };
Run Code Online (Sandbox Code Playgroud)

回想一下,我的txtAmount被格式化为货币,因此如果它的值为1,则txtAmount将显示$ 1.00我知道我应该能够替换$以便能够将其转换为十进制.如果这个应用程序在哪里使用不同的文化说例如es为西班牙语,那么文本框将显示一个eruo而不是$,我将不得不替换该符号以便能够投射它.

所以简而言之,有一种方法可以更新每次文本在该控件中更改时绑定到我的txtAmount控件的Amount属性,而不是在控件失去焦点时?

Ter*_*kel 8

将绑定属性设置UpdateSourceTriggerPropertyChanged

<TextBox Text="{Binding Amount, StringFormat=c, UpdateSourceTrigger=PropertyChanged}" Name="txtAmount"  />
Run Code Online (Sandbox Code Playgroud)