4

我们已经使用 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) 您如何处理项目中复杂的数据绑定需求?

4

1 回答 1

3

强烈自以为是的答案:

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

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

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

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

于 2013-06-06T03:42:23.330 回答