将财产绑定到另一个财产

时间:2009-07-27 14:25:25

标签: c# binding .net-2.0

我有嵌套的组框,它在逻辑上代表我的应用程序中的嵌套数据结构。假设我有这样的结构:

Dev1  
- CDev1  
- CDev2  
    - ICDev1  
    - ICDev2

我有复选框来启用/禁用每个Devs。我想将子复选框的CheckState绑定到父复选框的CheckState。我希望机制像这样工作:当我检查CDev2,ICDev1& ICDev2会自动检查。但是当我取消选中ICDev1时,CDev2会保持自己的状态。基本上,我希望将这些事件传播给子节点而不是父节点,就像单向绑定一样。

我正在使用.Net 2.0 SP2。我不知道这是否可能,因此如果你向我展示一些关于此的指示,我会很高兴。如果不可能,我将为所有复选框实现事件处理程序。

5 个答案:

答案 0 :(得分:5)

试试这个:

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

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

答案 1 :(得分:0)

理论上,这可以在WPF中使用双向绑定(这里是tutorial on data binding in WPF)。我不认为你可以使用WinForms自动完成。如果您正在使用WinForms,则必须捕获并处理事件以手动修改该类型的状态更改。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在WPF中是可能的,但我认为winforms不可能,因为在WinForms中没有属性更新事件机制,如依赖属性或INotifyPropertyChanged

答案 4 :(得分:0)

看看herelink到Kent Boogart的Truss图书馆,它完全绕过了winforms。但是,根据您的模型,它可能需要一些子类,因为它的工作方式类似于wpf。