我正在编写一个WinForms应用程序,并且正在尝试将.NET对象上的布尔属性绑定到Checkbox的“checked”属性。我成功创建了绑定,但是当我将source属性的值从false更改为true时(我有一个切换它的按钮),复选框的“checked”属性不反映该更改。
if (chkPreRun.DataBindings["Checked"] == null)
{
Debug.WriteLine("Adding chkPreRun databinding");
Binding _binding = chkPreRun.DataBindings.Add("Checked", NwmConfig, "PreRun")
// Added this just to ensure that these were being set properly
_binding.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
_binding.ControlUpdateMode = ControlUpdateMode.OnPropertyChanged;
}
例如,我能够将text属性成功绑定到TextBox的值。但是,我不确定在绑定到“Checked”属性时我错过了什么。
答案 0 :(得分:7)
要使其工作,源必须具有被激活的PreRunChanged
事件(EventHandler
),或者必须实现INotifyPropertyChanged
(包括此属性)。或者作为边缘情况,必须有支持通知的自定义 PropertyDescriptor
实现(但这种情况非常罕见。
您的代码是否有PreRunChanged
?它会在适当的时候被提升吗?
(UI不会轮询更改;它只通过通知事件了解更改)