首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# Winforms自定义控件,对属性的绑定不起作用,并导致选项卡问题

C# Winforms自定义控件,对属性的绑定不起作用,并导致选项卡问题
EN

Stack Overflow用户
提问于 2012-11-25 17:38:15
回答 1查看 1.9K关注 0票数 0

我刚刚升级了一个使用CSLA的旧.NET 1.1WinForms应用程序到.NET 4.0,以及支持使用INotifyPropertyChanged接口的更高版本的INotifyPropertyChanged。

这样做的很大一部分原因是数据库的改进--例如,能够在绑定时更新更改,而不是在验证(选项卡)时更新。

我有自定义用户控件,NumberBox。本质上,它只是一个文本框,有一些属性,如数字类型、小数位等等。我公开了对象类型的公共属性BindableValue。正是这个属性将我的CSLA类(继承验证规则的标准.NET类、属性更改等)整型属性绑定到它,在这种情况下,类属性是整数。

我升级后的问题如下:

  1. 如果我在数字框控件中输入一个值(例如1234 ),它不会将值推回绑定到的类的属性,直到我关闭选项卡,即使我已经配置了一个对象绑定源到自定义的BindableValue属性,并将更新模式设置为属性更改。
  2. 输入值后,如(1)中所示,如果我返回并删除该值,则会阻止我将数字框中的选项卡关闭或单击。我已经将VS2010设置为在抛出.NET异常时抛出,但它没有破坏。

我已经有一段时间没有做WinForms的事情了,所以我有点不知所措。任何提示以及解决方案都将不胜感激。

编辑:--我尝试过许多不同的东西,但进展很快,现在变得非常令人沮丧:

  1. 我遵循关于MSDN的信息,即在textbox的私有keyUp事件处理程序中添加了一个ComplexBindingProperties attrib,这与链接的文章OnBindableValueChanged()所指示的事件略有不同。但是,在所有情况下,我的事件BindableValueChanged总是为空。
  2. 我阅读了类似的文章(1),但没有使用EventHandler声明事件,而是使用PropertyChangedEventHandler,尝试了同样的结果。
  3. 我添加了DefaultBindingProperty attrib。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-19 13:28:10

[你也可以在我的公司博客上读到这段经历-- OCC博客-装订问题 ]

我终于想出了答案,所以我想在这里分享它,以拯救其他人在谷歌上搜索拖网的单调乏味,读到很多回应说它们有效,但在.NET 4.0中似乎不再适用了。

好吧,我在谷歌上读到的很多东西都告诉我,我的用户控件必须使用EventHandler或PropertyChangedEventHandler委托更改事件--不同的页面表示不同的委托。我都试过了-失败了!

我在.NET 4.0中所做的实际上要好得多。简单地说,就像我的类绑定我的用户控件一样,我必须实现INotifyPropertyChanged接口。然后,在我的用户控件中,当我想要向后推回我的源对象时,我只是引发了PropertyChanged事件(例如,PropertyChanged("BindableValue");)定义的接口和嘿presto都与这个世界再次友好相处。

上面这是一个更优雅,但不幸的是,谷歌索引的文章,论坛和帖子还没有赶上这个.NET 4.0,所以所有现有的东西将导致你的死胡同和很多挫折。我希望这能帮别人节省很多时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13553592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档