正如 jods 所说,将 TextBox 的 Text 绑定到 ViewModel 属性的最佳方式。守则是:
看法:
<TextBox x:Name="TextBox1" Text="{Binding Path=Text1,Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/>
视图模型:
public string Text1
{
get { return _text1; }
set
{
_text1 = value;
RaisePropertyChanged("Text1");
}
}
查看后面的代码:
private void ViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Text1")
{
//Call UI related method...
}
}
这样就满足了你的两个条件: 1、每次编辑TextBox失去焦点的时候,Text1的Setter会被调用,ViewModel会引发PropertyChanged事件。2. 当底层Text1改变时。Text1 也会引发事件,以便 View 知道它。
也可以避免你的两个顾虑: 1、第一次绑定,只调用Text1的getter。没有引发任何事件。2. Text1的Setter只有在TextBox失去焦点后才被调用。