【问题标题】:Binding a property to another property将一个属性绑定到另一个属性
【发布时间】:2010-11-14 09:06:19
【问题描述】:

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

Dev1  
- CDev1  
- CDev2  
    - ICDev1  
    - ICDev2

我有复选框来启用/禁用这些开发人员中的每一个。我想将子复选框的 CheckState 绑定到父复选框的 CheckState。我希望机制像这样工作:当我检查 CDev2 时,ICDev1 和 ICDev2 会自动检查。但是当我取消选中 ICDev1 时,CDev2 保持在它自己的状态。基本上,我希望将这些事件传播给孩子而不是父母,就像一种方式绑定一样。

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

【问题讨论】:

    标签: c# binding .net-2.0


    【解决方案1】:

    试试这个:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-01
              • 1970-01-01
              • 2015-07-12
              • 1970-01-01
              • 1970-01-01
              • 2020-06-22
              相关资源
              最近更新 更多