我有一个用户控件,带有一个文本框和一个数据绑定属性 - 值。Value 可以是任何对象,例如 Color、Array、Font 等。只要文本更改,属性 Value 就会更改,只要它有效。
查看 msdn 文章:如何:应用 PropertyNameChanged 模式 ,它说我应该 从控制端使用PropertyNameChanged 事件模式。
现在,如果我有 DataSourceUpdateMode = OnValidate,那么我什至不需要应用此模式。如果,说。我的 Value 属性绑定到业务对象中的颜色字段,然后在我在文本框和选项卡中键入 red 后,再到另一个字段,然后表单上绑定到相同颜色字段的任何其他字段都会立即更新。
但是,如果我的 DataSourceUpdateMode = OnPropertyChange,我希望表单上的所有其他字段在我按下“d”后立即更新(如 re'd')。
这不会发生。所以,我应用了前面提到的 PropertyNameChanged 模式,但它仍然没有发生。
但是,如果我删除 PropertyNameChanged 事件,而是使用 INotifyPropertyChanged,它会完美运行。
我的问题是,根据文章, INotifyPropertyChanged 应该由您的业务对象使用,而不是用户控件。
它有效,但我不想遇到任何未来的问题。
有人知道发生了什么吗?
预计到达时间:
假设可以使用 INotifyPropertyChanged,我现在还有一个问题。我不希望用户必须订阅“PropertyChanged”事件,然后检查参数以查看属性“Value”是否发送了它。所以,我补充说:
Public Event ValueChanged As EventHandler(Of EventArgs)
这打破了绑定。源代码甚至没有更新验证,更不用说属性更改了。
我想我必须将 ValueChanged 事件重命名为 FeckingValueChanged 之类的。
如果框架实际上首先对引发的 ValueChange 事件做了一些事情,我不会太介意!