我将以下文本框绑定到 MVVM ViewModel
文本框
<TextBox Height="71" Width="341"
Text="{Binding BalanceValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat=N2}"
Margin="0,2,2,2" HorizontalAlignment="Right"/>
Run Code Online (Sandbox Code Playgroud)
下面是我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
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这是有效的,除了测试时,它TextBox会在我打字时自行更新。我应该使用不同的事件吗TextBox?
在某些情况下,更新LostFocus每个视图模型PropertyChanged同样不方便。(例如,输入搜索关键字 - 我们不想在每个字母后运行搜索,我们希望在用户停止输入时执行搜索 - 但他们不会离开搜索字段)
由于 .net 4.5Binding类具有Delay属性(以毫秒为单位):
Text="{Binding BalanceValue, Mode=TwoWay, Delay=333, UpdateSourceTrigger=PropertyChanged, StringFormat=N2}"
Run Code Online (Sandbox Code Playgroud)
为了避免每次击键都更新源对象,请将 Delay 属性设置为合理的值,以使绑定仅在用户停止键入后经过该时间后更新。