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)
现在创建一个包含两个TextBoxes 的窗口,这两个 esText绑定到Property此类实例上的属性。使两者都使用双向绑定,并UpdateSourceTrigger设置为PropertyChanged。
每当您在其中一个边界中输入数字时TextBox,另一个边界TextBox将显示下一个数字。第一个绑定TextBox忽略PropertyChanged源引发的事件,因为该事件是在绑定期间发生的。第二个文本框确实由第一个事件更新PropertyChanged,但它不会用新值更新源。
如果您在代码中更新属性(例如,在按钮单击事件中),两个TextBoxes 将显示相同的值 - 例如,如果您将属性设置为 20,则两个 es 将显示 21。当属性被更改时,将触发 property-changed 事件。设置为 20,将显示当前值 21,并且绑定不会更新源。
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |