如何在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 a ViewModel对象,封装应显示在窗体上的所有数据,并从该对象设置窗体上的所有属性。 这意味着你失去了绑定的所有“魔力”,但它不再是黑盒子,而且更容易调试。

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

    链接地址: http://www.djcxy.com/p/29183.html

    上一篇: How to strongly type data binding in C# WinForms?

    下一篇: Autofac & WinForms Integration Issue