使用Lambda而不是属性的.net WinForms数据绑定

Rad*_*u D 6 data-binding databinder winforms

在我的项目中,我有一个模型,我想使用其中一个模型属性绑定标签的可见状态.我不想将另一个ShowLabel属性添加到模型中.我希望能够写出这样的东西:

label.Bindings.Add("Visible", model, m => m.Name != "Default");
Run Code Online (Sandbox Code Playgroud)

基本上我希望能够编写lambda表达式而不是向我的模型添加属性.这可能吗?

Ian*_*ths 2

Windows 窗体数据绑定可识别该ICustomTypeDescriptor接口,该接口允许对象在运行时决定向数据绑定提供哪些属性。因此,如果您编写一个实现,您可以告诉 Windows 窗体您拥有您想要拥有的任何属性,并且您可以决定如何实现它们。

当然,这可能没有帮助 - 如果您想避免添加属性,您可能还想避免实现相当复杂的接口。显而易见的解决方案是编写一个类型,其作用是充当数据源并绑定到该数据源,而不是当前绑定到的任何对象。

当然,如果您这样做,那么实现您要在该包装器上实现的任何属性可能会更容易。

一般来说,对于数据绑定,您希望避免直接绑定到某些底层模型,正是因为您不希望纯粹为了 UI 的利益而将内容添加到模型中。这就是为什么“分离呈现”非常流行 - 不是直接连接模型和视图,而是在中间放置一些东西,其工作是进行调解。有人称其为视图模型,有人称其为演示者,但基本原则始终是演示分离。

听起来您正在尝试实现分离的表示(这很好),但不引入额外的类型,以便该中间层有地方可去。为什么不直接定义一个类(或一组类)来充当该层呢?