c# – 使用GetBindingExpression()强制所有WPF绑定控件更新.Upda
我有一个
WPF应用程序,其中包含约50个控件,这些控件绑定到我的业务对象上实现INotifyPropertyChanged的属性.这是我的业务对象的快速片段:
public class MyBusinessObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(PropertyChangedEventArgs e) { if (PropertyChanged != null) { PropertyChanged(this,e); } } // properties begin here private string _name; public string Name { get { return _name; } set { if (_name == value) { return; } _name = value; OnPropertyChanged(new PropertyChangedEventArgs("Name")); } } // constructor,etc. not shown } 我还有几个验证规则,用于验证这些控件中的用户输入.如果有任何验证错误,我正在使用命令绑定来阻止我的用户保存数据.我的应用程序还包括一个“重置默认值”按钮,显然,它将重置业务对象上所有属性的默认值.除了一个例外,这一切都完全符合我的要求.如果我的用户将无效数据输入一个或多个控件,然后单击“重置默认值”按钮,则包含无效数据的控件并不总是按照我的预期更新.这是因为我的属性设置器中的以下代码: if (_name == value) { return; } 此代码的存在是为了防止在我的用户在绑定的UI控件中输入的值与属性已设置的值相同时发生不必要的属性更改通知.举个例子,我的UI中有一个IntegerUpDown控件(这个控件是Xceed的Extended WPF Toolkit的一部分).我的控件绑定的属性的默认值是10.我的用户从控件中删除了值,并且触发了我的验证规则,这导致验证错误,并且使用错误装饰器等适当地更新UI.此控件映射到的属性尚未更改,因此它仍设置为10.现在我的用户单击“重置默认值”按钮,这将导致重置属性的默认值(10).但是,属性的??值已设置为10,因此我的setter中的短路逻辑将返回而不是设置属性值. 所以现在,在我的用户点击“重置默认值”后,我也强制更新我的绑定目标,如下所示: this.myIntegerUpDown.GetBindingExpression(Xceed.Wpf.Toolkit.IntegerUpDown.ValueProperty).UpdateTarget(); 这解决了我的问题,但仅限于此特定控件.是否有任何简单的方法可以为我的所有绑定控件执行此操作而无需指定每个控件?谢谢. 解决方法
OnPropertyChanged(new PropertyChangedEventArgs(string.Empty));
这意味着暗示该对象上的所有属性都已更改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |