我有一个c#winforms应用程序,它有很多不同的控件(通过bindingsource)绑定到我的业务对象的不同属性(这个对象实现了INotifyPropertyChanged)。当我的用户将某个控件设置为特定值时,我需要更改另一个属性的值(在代码中),甚至可能禁用绑定到该属性的控件。例如,我有一个映射到datetime属性的datetimepicker。如果我的用户输入的时间值小于00:10:00(HH:MM:SS),我需要取消选中一个复选框(绑定到bool属性)。目前,我在验证事件处理程序中有代码,该处理程序查看datetimepicker中的值以及.Hour == 0和.Minute< 10,我以编程方式设置bool属性的值(复选框绑定的值)等于false。当我这样做时,复选框变为未选中状态,但datetimepicker中的值将恢复为用户输入导致布尔属性首先设置为false的时间之前的值。
如果我在调试器中观察datetimepicker的值,那么只要这行代码执行就会重置:
businessObject.booleanVariable = false;
在我以编程方式将boolean属性设置为false之前,是否需要执行某些操作才能将datetimepicker值强制回到object属性?或者我这样做是错的?是否有其他方法可以处理可能影响其他绑定控件的绑定控件?
答案 0 :(得分:1)
{/ 1}}事件在数据发送回绑定对象之前触发。其目的是允许您确保控件包含根据业务逻辑有效的数据,并使用它来处理普通(非验证)逻辑将导致您看到的问题。
最好的做法是在属性的setter中添加设置Validating
属性的代码。