gpt4 book ai didi

c# - 如何在 C# WinForms 中强类型数据绑定(bind)?

转载 作者:行者123 更新时间:2023-11-30 12:10:52 26 4
gpt4 key购买 nike

我们已经使用 WinForms 数据绑定(bind)几个月了,遇到了一些问题:

  • 缺乏强类型
  • 无法将控件绑定(bind)到复杂属性(模型/模型集合)
  • 难以为空值和特殊要求定制行为
  • 创建膨胀解决方案的 .datasource 文件
  • 作为“黑匣子”运行——难以诊断问题或调整功能

我们正在考虑构建一个为我们的用户控件和模型定制的数据绑定(bind)实用程序。这将通过 lambda 函数进行强类型化,能够绑定(bind)复杂的属性,并允许我们需要的任何其他特殊功能。绑定(bind)可能发生在大致如下所示的情况下:

var binder = new Binder<Person>();
binder.Bind (p => p.FirstName, FirstNameText);
binder.Bind (p => p.Surname, SurnameText);
binder.Bind (p => p.BirthDate, BirthDatePicker);
binder.Bind (p => p.PersonType, PersonTypePicker); <-- Binds direct to PersonType model – not PersonTypeId value
binder.Bind (p => p.Interests, InterestsPicker); <-- Binds collection property to control’s collection property (automatically sync’s contents)
binder.DataSource = _selectedPerson;

问题:

1) 这种方法是推荐的还是陷阱?

2) 是否有第 3 方实用程序已经完成了所有这些工作?

3) 您如何处理项目中复杂的数据绑定(bind)需求?

最佳答案

前面有强烈的自以为是的答案:

我尝试了几种不同的 WinForms 绑定(bind)方法(多年来),最终很容易获得您想要的 80%,而其他 20% 的工作需要大量的黑客攻击。此外,通常第 3 方控件都有自己的怪癖。

您的列表很好地说明了陷阱。不幸的是,WinForms 不具备 WPF 等的绑定(bind)能力。

我目前的数据绑定(bind)方法是不使用任何绑定(bind)对象并手动完成所有操作。我通常采用的方法是将表单设为 passive view。并向 Form 传递一个 ViewModel 对象,该对象封装了应在表单上显示的所有数据,并从该对象设置表单上的所有属性。这意味着您失去了绑定(bind)的所有“魔力”,但它不再是一个黑盒子,而且更容易调试。

好问题,我期待其他答案并被证明是错误的。

关于c# - 如何在 C# WinForms 中强类型数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com