键入时,文本框会自动更新

时间:2018-03-22 15:23:48

标签: c# wpf xaml mvvm

我将以下文本框绑定到MVVM ViewModel

文本框

<TextBox Height="71" Width="341" 
         Text="{Binding BalanceValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat=N2}"
         Margin="0,2,2,2" HorizontalAlignment="Right"/>

以下是我处理输入的ImportPresenter

Public Class ImportPresenter : ObservableObject
{
    private double _BalanceValue = 0;

    public double BalanceValue
    {
        get
        {
            return _BalanceValue;
        }
        set
        {
            _BalanceValue = double.Parse(value.ToString(), 
                            System.Globalization.NumberStyles.Currency);
            RaisePropertyChangedEvent("BalanceValue");
        }
    }//END BALANCEVALUE
}

在大多数情况下,这是有效的,除了测试时,TextBox在我输入时正在更新。我应该为TextBox使用不同的事件吗?

2 个答案:

答案 0 :(得分:3)

默认情况下,UpdateSourceTrigger的{​​{1}}为TextBox。通过将其设置为Lost Focus,它将针对所做的每个更改进行更新,例如每个角色。

答案 1 :(得分:3)

在某些情况下更新LostFocusPropertyChanged上的viewmodel同样不方便。 (例如,键入关键字进行搜索 - 我们不想在每个字母后运行搜索,我们希望在用户停止输入时执行此操作 - 但他们不会离开搜索字段)

因为.net 4.5 Binding类具有Delay属性(以毫秒为单位):

Text="{Binding BalanceValue, Mode=TwoWay, Delay=333, UpdateSourceTrigger=PropertyChanged, StringFormat=N2}"
  

为避免每次按键更新源对象,请将Delay属性设置为合理的值,以便仅在用户停止输入后经过了一段时间后才更新绑定。