我将以下文本框绑定到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
使用不同的事件吗?
答案 0 :(得分:3)
默认情况下,UpdateSourceTrigger
的{{1}}为TextBox
。通过将其设置为Lost Focus
,它将针对所做的每个更改进行更新,例如每个角色。
答案 1 :(得分:3)
在某些情况下更新LostFocus
和PropertyChanged
上的viewmodel同样不方便。 (例如,键入关键字进行搜索 - 我们不想在每个字母后运行搜索,我们希望在用户停止输入时执行此操作 - 但他们不会离开搜索字段)
因为.net 4.5 Binding
类具有Delay属性(以毫秒为单位):
Text="{Binding BalanceValue, Mode=TwoWay, Delay=333, UpdateSourceTrigger=PropertyChanged, StringFormat=N2}"
为避免每次按键更新源对象,请将Delay属性设置为合理的值,以便仅在用户停止输入后经过了一段时间后才更新绑定。