【问题标题】:Best practice for User Control Data Binding - How to achieve this?用户控件数据绑定的最佳实践 - 如何实现?
【发布时间】:2010-07-28 06:29:46
【问题描述】:

我有一个带有文本框、标签、...的用户控件。现在我想获得相同的数据绑定功能,就像我将控件直接放在表单上一样。我尝试在用户控件中使用额外的绑定源和错误提供程序,并尝试将我的控件的属性作为属性提供。

没有任何效果。所以必须有一个解决方案来完成这项工作。那怎么办?

【问题讨论】:

  • 您能否提供一个小代码示例(或更多细节)来说明您尝试生成的绑定?还有 C# 或 vb.net 代码示例偏好?
  • 我会尝试:我有一个带有 3 个 TabPages 的 TabControl。这 3 个标签页有 3 个地址(交货、发票、默认)。现在我有了一个 AddressUserControl 并在 TabPages 上添加了这个 UserControl。我在主窗体上的 DataBinding 有一个带有 DeliveryAddress、InvoiceAddress 和 DefaultAddress 的 POCO。那么如何使用 ErrorProvider 实现良好的数据绑定呢? ErrorProvider 也在主窗体上。
  • 关于 POCO 的问题:我不明白 DeliveryAddress、InvoiceAddress 和 DefaultAddress 属性是字符串还是 POCO(具有街道、邮政编码等属性)。你能写一些(伪)代码来说明它们是如何定义的吗?

标签: .net winforms data-binding ado.net user-controls


【解决方案1】:

我在https://github.com/edymtt/usercontrolwithdatabinding 实现了一个示例,以说明可能适用于您的问题的一些数据绑定方案。我特别提到了两种情况:

  1. 实现UserControl 以编辑基本属性(字符串、整数、...);
  2. 实现UserControl 来编辑复杂类型的属性(例如Address POCO);

实现UserControl编辑基本属性

在这种情况下,只需公开底层控件的相关属性(例如 TextBoxText 属性)并在此更改时引发适当的事件(继续该示例,处理 TextChanged TextBox 的事件并引发新的 TextChanged 事件,请参阅“自定义控件的更改通知”部分的 this page on MSDN

表单中的ErrorProvider(你有绑定源)可以毫无问题地处理这种UserControl

实现UserControl 来编辑复杂类型的属性

这个案例并不比上一个复杂:

  • 您需要在用户控件中放置一个BindingSource 和一个Error Provider 来处理您需要的POCO;
  • 接下来,您需要公开一个属性来接收绑定的对象并在运行时分配它。

我希望示例足够清晰,可以理解绑定的工作原理。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多