c# - 将控件绑定(bind)到类属性——这在技术上可行吗?

标签 c# .net asp.net vb.net data-binding

我还没有找到在 .Net 中进行双向数据绑定(bind)的“好”方法。
我不喜欢的一件事,例如在目前的 asp.net 中,两种数据绑定(bind)方式是在 aspx 页面中进行绑定(bind),没有编译时检查,即:

<asp:TextBox ID="TitleTextBox"
            runat="server"            Text='<%# Bind("Title_oops_spelled_wrong") %>'>

我想要这样的东西:

Class Binder
Public Sub BindControl(ctl As Control, objectProperty As ???????)
  '// Add ctl and objectProperty to a collection

End Sub

我不知道的是,在我的示例中如何接收 objectProperty;我想收到一个对该属性的引用(即:一个指针),因此稍后,通过该引用,我可以读取或写入该属性。

也许这可以通过委托(delegate)来完成??

更新:
请注意,我想将控件引用 添加到绑定(bind)集合,然后该集合将用于绑定(bind)和解除绑定(bind)。

最佳答案

您想避免使用 .NET 数据绑定(bind)机制的原因是什么?它处理保持控件值和类属性值之间的奇偶校验,并提供丰富的设计时支持。

您可以通过两种方式与数据绑定(bind)引擎交互:以编程方式或通过设计器。以编程方式进行基本数据绑定(bind)是微不足道的。假设我有一个名为“FooClass”的类,它有一个名为“MyString”的字符串属性。我在表单上有一个名为 myTxtBox 的文本框,其中包含一个名为 foo 的 FooClass 实例,我想将它绑定(bind)到 MyString 属性:

myTxtBox.DataBindings.Add("Text", foo, "MyString");

执行此操作将导致对 TextBox 的更新分配给该属性,并且从其他地方对该属性的更改将反射(reflect)在 TextBox 中。

对于更复杂的数据绑定(bind)方案,您可能需要在项目中创建对象数据源并将 BindingSource 放在表单上。如果您在创建数据源的特定步骤方面需要帮助,我可以提供帮助,但通常您将在项目中创建源并选择要绑定(bind)到的类。然后,您可以在窗体上放置一个 BindingSource,将其指向对象项目数据源,然后使用 Visual Studio 设计器将控件的属性绑定(bind)到对象的属性。然后,将代码中的 DataSource 属性设置为要绑定(bind)到的类或集合的实例。

作为旁注,据我所知,没有“属性委托(delegate)”,因为属性实际上是函数对(一个 get_ 和一个 set_)。

更新:

在阅读您的评论时,我想指出 .NET 数据绑定(bind),即使在控件级别,也不会自动使用反射。数据绑定(bind)是围绕类型描述符和属性描述符构建的,用于绑定(bind)控件和数据源。确实,如果其中一方或双方未实现特定的属性和类型描述,则将使用反射,但任何一方都可以自由提供自己的描述配置文件,而不会使用反射。

关于c# - 将控件绑定(bind)到类属性——这在技术上可行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/667205/

相关文章:

c# - 是否可以定义扩展运算符方法?

c# - 框架中是否已经有比较接口(interface)

.net - 如何以编程方式在 Azure VM 上远程安装 .NET 4 客户端?

c# - 通过事件处理程序将值插入表中

c# - 形成 KeyUp 和 KeyDown 事件来改变变量

c# - 网络浏览器 : simulate mouse click on ul-li item in webpage

c# - 显示在按钮后面的水平列表项中的面板

c# - ExecuteScalar 返回 null

c# - 在 C# 中按共享属性对不同对象的列表进行排序

c# - Dijkstra 的算法问题