【发布时间】:2010-12-11 13:44:07
【问题描述】:
我有一个用户控件,带有一个文本框和一个数据绑定属性 - 值。 值可以是任何对象,例如颜色、数组、字体等。 每当文本更改时,只要属性值有效,就会更改。
看msdn文章:How to: Apply the PropertyNameChanged Pattern ,它说我应该使用PropertyNameChanged Event pattern 从控制端。
现在,如果我有 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 事件做了什么,我不会太介意!
【问题讨论】:
标签: .net vb.net data-binding inotifypropertychanged