INotifyPropertyChanged обновление ontextchange - PullRequest
3 голосов
/ 12 марта 2012

У меня есть следующая привязка в моем приложении 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));
    }

   //.....

этот код работает нормально. Свойство Amount в моем коде будет обновляться всякий раз, когда я изменяю значение txtAmount, а также наоборот (изменение значения Amount в C # приведет к обновлению txtAmount)

В любом случае, как я могу обновлять сумму каждый раз, когда меняю текст в элементе управления txtAmount? Я не хочу ждать, пока txtAmount не потеряет фокус, чтобы Amount get обновился в коде позади.


Вещи, которые я пробовал:

        txtAmount.TextChanged += (a, b) =>
        {
            Amount = decimal.Parse(txtAmount.Text);
        };
* 1020. Если в этом приложении, где используется другая культура, скажем, например, es для испанского, в текстовом поле вместо $ будет отображаться eruo, и мне придется заменить этот символ, чтобы иметь возможность его разыграть.

Итак, есть ли возможность обновлять свойство Amount, связанное с моим элементом управления txtAmount, каждый раз, когда текст изменяется в этом элементе управления, а не когда элемент управления теряет фокус?

Ответы [ 2 ]

8 голосов
/ 12 марта 2012

Установить свойство привязки UpdateSourceTrigger на PropertyChanged

<TextBox Text="{Binding Amount, StringFormat=c, UpdateSourceTrigger=PropertyChanged}" Name="txtAmount"  />
3 голосов
/ 12 марта 2012

Итак, есть ли возможность обновлять свойство Amount, связанное с моим элементом управления txtAmount, каждый раз, когда текст изменяется в этом элементе управления, а не когда элемент управления теряет фокус?

Короче говоря:

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