【问题标题】:INotifyPropertyChanged update ontextchangeINotifyPropertyChanged 更新 ontextchange
【发布时间】:2012-03-12 15:28:27
【问题描述】:

我的 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 在后面的代码中更新。


我尝试过的事情:

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

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

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

【问题讨论】:

标签: c# wpf inotifypropertychanged


【解决方案1】:

将绑定属性UpdateSourceTrigger设置为PropertyChanged

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

【讨论】:

    【解决方案2】:

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

    简而言之:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 2014-01-12
      • 1970-01-01
      相关资源
      最近更新 更多