我刚刚将使用 CSLA 的旧 .NET 1.1 Winforms 应用程序升级到 .NET 4.0 和支持使用 INotifyPropertyChanged 接口的更高版本的 CSLA。
这样做的很大一部分原因是数据绑定得到了改进——例如,能够在绑定时更新更改而不是在验证时进行更新(制表符关闭)。
我有自定义用户控件,NumberBox。本质上,它只是一个带有一些属性的文本框,例如数字类型、小数位数等。我已经公开了一个名为 BindableValue的类型对象的公共属性。正是这个属性,我将我的 CSLA 类(继承验证规则、属性更改和各种东西的标准 .NET 类)整数属性绑定到,在这种特殊情况下,它的类属性是整数。
我升级后的问题如下:
- 如果我在我的数字框控件中输入一个值,例如 1234,它不会将该值推回它绑定到的类属性中,直到我关闭标签,即使我已经为自定义 BindableValue 属性配置了一个对象绑定源更新模式设置为属性更改。
- 在 (1) 中输入值后,如果我返回并删除该值,我将被阻止关闭或单击数字框。我已将 VS2010 设置为在抛出 .NET 异常时抛出,但它没有中断。
我已经有一段时间没有做 WinForms 的东西了,所以我有点不知从何开始。任何提示以及解决方案将不胜感激。
编辑: 我已经尝试了许多不同的事情,但进展不快,现在真的很令人沮丧:
- 我遵循了MSDN上的信息,即我添加了一个 ComplexBindingProperties 属性,在文本框的 private keyUp 事件处理程序中略有不同我引发了链接文章 OnBindableValueChanged() 所示的事件。但是,在所有情况下,我的事件 BindableValueChanged 始终为空。
- 我阅读了与 (1) 类似的文章,但他们没有使用 EventHandler 声明事件,而是使用了 PropertyChangedEventHandler,尝试了相同的结果。
- 我添加了 DefaultBindingProperty 属性。