2012-07-21 52 views
1

我想一个复选框绑定到自定义对象布尔属性如下:绑定自定义对象复选框在VB.NET

chkTableIsReadonly.DataBindings.Add(New Binding("Checked", objectBindingSource, "ApplyforVisa", True, DataSourceUpdateMode.OnPropertyChanged, False)) 

自定义类支持INotifyPropertyChanged接口。

一切工作发现,当我复选框最初绑定到一个新的对象:

objectBindingSource.Datasource = new objectToBindTo

这里是奇数部分:

  1. 如果我选中该复选框,设置属性被调用并且INotifyPropertyChanged事件被调用,每个人都很高兴。
  2. 如果我取消选中同一个框,Set属性不会被调用,INotifyPropertyChanged事件永远不会被调用,并且(更差的部分),我无法导航到另一条记录。

我已经尝试捕获CheckedChanged事件手动设置object.ApplyForVisa属性,但没有成功。属性Set被调用,INotifyPropertyChanged事件被调用,但我仍然被锁定在控件上,无法导航。

我曾尝试在CheckedChanged事件中调用bindingsource.endedit,但没有成功。

只有当我取消勾选框时才重要。该复选框为双态 - 真或假。

我所有的其他绑定工作得很好 - 文本框,组合框,数据网格。只是不复选框。

我唯一的想法是,似乎行为像一个绑定源数据错误,但没有错误引发。如果我为绑定源添加数据错误事件处理程序,它永远不会被调用。

+0

您可以包含'objectToBindTo'实现的代码,包括'ApplyForVisa'属性以及任何附加的处理程序到'PropertyChanged'的实例吗? – 2012-07-26 15:30:31

回答

4

假设ApplyForVisa属性是一个布尔值,您可以通过将BindingformattingEnabled参数设置为False来解决此问题。

chkTableIsReadonly.DataBindings.Add(_ 
    New Binding("Checked", objectBindingSource, "ApplyforVisa", _ 
       False, DataSourceUpdateMode.OnPropertyChanged, False))