让我们假设属性Name在这个视图中绑定到TextBox。WPF框架如何处理MVVM中属性的循环更新?
private string name
public string Name
{
get {return name;}
set {
name=value;
OnPropertyChanged("Name");
}
}
查看
<TextBox Text="{Binding Name, Mode=TwoWay"/>
当我们更新文本框中的文本,它会调用的名称属性的setter这反过来又提高的PropertyChanged这些假设再次更新UI。我很好奇WPF如何避免更新和提升事件的递归。是通过考虑该事件的发件人完成的?
4)TextBox使用viewmodel属性更新值... –
没有第四步。这是不需要的,因为在第一步中,TextBox已经具有新的值(内部存储),并且它不会“重新触发”两次同样的更新到viewmodel。它有简单的检查到位。这就是为什么你有时需要做“var x = Property; Property = null; Property = x;”到“重新触发”绑定机制,因为它在内部存储了相同的值。 (例如,Property = _samePropertyValue不会将其切割) –
不,这就是为什么您应该检查setter本身内部实际更改的属性值。您不需要在自己的代码中处理错误的PropertyChanged通知,只需使通知正确无误。我也会注意到你在答案中没有提到任何这一点。根据你自己的描述,肯定有无限递归。 –