Ben*_*nny 6 data-binding wpf recursion
我正在研究WPF中的绑定,然后我有这个问题:
假设依赖属性绑定到实现INotifyPropertyChanged接口的对象的属性.
当绑定目标更新源时,源的属性会更新.
由于源对象的属性设置器发生了变化,它将依次通知侦听器 - 绑定目标,这将导致递归更新.
如何在WPF中避免这种情况?
由属性更改事件引起的源更新不会触发绑定,并且绑定更新源时发生的属性更改事件将被忽略。
这是演示这一点的简单方法。创建这个类:
public class TestClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int _Property;
public int Property
{
get { return _Property; }
set
{
if (value < 1000) // just to be on the safe side
{
_Property = value + 1;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Property"));
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在创建一个包含两个TextBox
es 的窗口,这两个 esText
绑定到Property
此类实例上的属性。使两者都使用双向绑定,并UpdateSourceTrigger
设置为PropertyChanged
。
每当您在其中一个边界中输入数字时TextBox
,另一个边界TextBox
将显示下一个数字。第一个绑定TextBox
忽略PropertyChanged
源引发的事件,因为该事件是在绑定期间发生的。第二个文本框确实由第一个事件更新PropertyChanged
,但它不会用新值更新源。
如果您在代码中更新属性(例如,在按钮单击事件中),两个TextBox
es 将显示相同的值 - 例如,如果您将属性设置为 20,则两个 es 将显示 21。当属性被更改时,将触发 property-changed 事件。设置为 20,将显示当前值 21,并且绑定不会更新源。
归档时间: |
|
查看次数: |
835 次 |
最近记录: |