问题描述
有一个带有名为“RelatedPrograms”的公共数据表变量的模型类。它通过数据绑定用作 UserControl 类中 DataGridView 控件的源:
dataGridView.DataBindings.Add("DataSource",Model,nameof(Model.RelatedPrograms),false,DataSourceUpdateMode.OnPropertyChanged);
现在,如果我向 Model 类引入一个名为“RelatedProgramsChanged”的新事件字段
public event EventHandler<EventArgs> RelatedProgramsChanged;
数据绑定停止工作,DataGridView 不会被来自 DataTable 的数据刷新。但是列显示正确。这是什么原因造成的?只要变量不以 -Changed 结尾且未定义为事件,一切都会正常运行。
解决方法
如果您正在定义 RelatedProgramsChanged
,您还应该在属性值更改时触发该事件。您没有展示足够的代码来查明实现中的故障点。
PropertyNameChanged 事件是在引入 INotifyPropertyChanged Interface 之前发出更改信号的方式。有关详细信息,请参阅:Property-Changed Events。
来自 INotifyPropertyChanged 的 Remarks 部分:
对于在绑定客户端之间的绑定中发生的更改通知 和数据源,您的绑定类型应该:
-
实现 INotifyPropertyChanged 接口(首选)。
-
为绑定类型的每个属性提供一个更改事件。
不要两者都做。
此事件以及 ShouldSerializePropertyName 和 ResetPropertyName(请参阅:Defining Default Values with the ShouldSerialize and Reset Methods)方法由 WinForm 绑定机制使用的属性描述符检索。您可以在 ReflectPropertyDescriptor 检查属性描述符代码并阅读评论以了解更多信息。