C# 将一个属性绑定到另一个属性

C# 将一个属性绑定到另一个属性,c#,binding,.net-2.0,C#,Binding,.net 2.0,我有嵌套的GroupBox,它在逻辑上表示我的应用程序中的嵌套数据结构。假设我有一个这样的结构: Dev1 - CDev1 - CDev2 - ICDev1 - ICDev2 我有复选框来启用/禁用每个开发人员。我想将子复选框的复选状态绑定到父复选框的复选状态。我希望该机制像这样工作:当我检查CDev2时,会自动检查ICDev1和ICDev2。但当我取消选中ICDev1时,CDev2将保持其自己的状态。基本上,我希望这些事件传播到子级,而不是像单向绑定那样传播到

我有嵌套的GroupBox,它在逻辑上表示我的应用程序中的嵌套数据结构。假设我有一个这样的结构:

Dev1  
- CDev1  
- CDev2  
    - ICDev1  
    - ICDev2
我有复选框来启用/禁用每个开发人员。我想将子复选框的复选状态绑定到父复选框的复选状态。我希望该机制像这样工作:当我检查CDev2时,会自动检查ICDev1和ICDev2。但当我取消选中ICDev1时,CDev2将保持其自己的状态。基本上,我希望这些事件传播到子级,而不是像单向绑定那样传播到父级


我正在使用.NET2.0SP2。我不知道这是否可行,所以如果你能给我一些建议,我会很高兴的。如果不可能,我将为所有复选框实现事件处理程序。

在WPF中使用双向绑定理论上是可能的(下面是一个例子)。我认为你不能用WinForms自动完成。如果您使用的是WinForms,则必须捕获并处理事件以手动修改此类状态更改

试试这个:

childCheckBox.DataBindings.Add("Checked", parentCheckBox, "Checked");

您可能还想查看
TreeView
控件,它可以在每个项目旁边显示
复选框。

绑定不会解决您的问题。如果您找到了将ICDev1和ICDev2绑定到CDev2的方法,这意味着当检查ICDev1时,ICDev1和ICDev2都会被检查,反之亦然。如果这是您想要的,您不需要ICDev1、ICDev2复选框,只需要CDev2复选框。如果希望用户选中ICDev1,但不选中ICDev2,则需要实现事件处理程序。

在WPF中是可能的,但我认为在winforms中是不可能的,因为winforms中没有像dependency property或INotifyPropertyChanged这样的属性更新事件机制。

请看一看,还有Kent Boogart的Truss库,它完全绕过了winforms。但它可能需要一些子类化,这取决于您的模型,因为它的工作方式类似于wpf绑定