INotifyPropertyChanged update ontextchange

本文关键字:ontextchange update INotifyPropertyChanged | 更新日期: 2023-09-27 18:27:35

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

xaml:

   <TextBox Text="{Binding Amount, StringFormat=c}" Name="txtAmount"  />

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));
    }
   //.....

该代码运行良好。每当我更改txtAmount的值时,我代码后面的属性Amount都会更新,反之亦然(更改C#中Amount的值将更新txtAmount)

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


我尝试过的东西:

        txtAmount.TextChanged += (a, b) =>
        {
            Amount = decimal.Parse(txtAmount.Text);
        };

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

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

INotifyPropertyChanged update ontextchange

将绑定属性UpdateSourceTrigger设置为PropertyChanged

<TextBox Text="{Binding Amount, StringFormat=c, UpdateSourceTrigger=PropertyChanged}" Name="txtAmount"  />

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

简而言之:

<TextBox Text="{Binding Amount, StringFormat=c, 
                        UpdateSourceTrigger=PropertyChanged}" Name="txtAmount"  />