繁体   English   中英

如何在C#WinForms中强类型数据绑定?

[英]How to strongly type data binding in C# WinForms?

我们几个月来一直在使用WinForms数据绑定,并遇到一些问题:

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

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

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)您如何处理项目中复杂的数据绑定要求?

非常自以为是的答案:

我已经尝试了几种不同的WinForms绑定方法(多年来),最终很容易得到你想要的80%,并且需要大量的黑客才能使其他20%的工作。 此外,通常第三方控件都有自己的怪癖。

你的清单很好地说明了陷阱。 不幸的是,WinForms只是没有WPF的绑定能力。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM