Vb.net 重新启用带有数据绑定子项的GroupBox时,只有第一个子项重新启用

Vb.net 重新启用带有数据绑定子项的GroupBox时,只有第一个子项重新启用,vb.net,winforms,data-binding,groupbox,Vb.net,Winforms,Data Binding,Groupbox,我有一个带有子按钮的groupbox。所有子按钮都有其.Enabled数据绑定,以形成级别布尔值。为了排除故障,我还将布尔值绑定到标签。这是我在一个更大的应用程序中遇到的问题的最小再现 禁用groupbox可以正常工作 从屏幕截图中可以看出,重新启用groupbox不会带来任何影响。按钮3应该重新启用。没有。为什么? Imports System.ComponentModel Public Class Form1 Implements INotifyPropertyChanged

我有一个带有子按钮的groupbox。所有子按钮都有其.Enabled数据绑定,以形成级别布尔值。为了排除故障,我还将布尔值绑定到标签。这是我在一个更大的应用程序中遇到的问题的最小再现

禁用groupbox可以正常工作

从屏幕截图中可以看出,重新启用groupbox不会带来任何影响。按钮3应该重新启用。没有。为什么?

Imports System.ComponentModel

Public Class Form1
    Implements INotifyPropertyChanged


    Private _canClone As Boolean = True
    Private _canEdit  As Boolean = True


    Public Property CanClone As Boolean
        Get
            Return _canClone
        End Get
        Set(value As Boolean)
            _canClone = value
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("CanClone"))
        End Set
    End Property


    Public Property CanEdit    As Boolean
        Get
            Return _canEdit
        End Get
        Set(value As Boolean)
            _canEdit = value
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("CanEdit"))
        End Set
    End Property



    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        GroupBox1.Enabled = Not GroupBox1.Enabled
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Button1.DataBindings.Add(New Binding("Enabled", Me, "CanClone"   , True, DataSourceUpdateMode.OnPropertyChanged))
        Button3.DataBindings.Add(New Binding("Enabled", Me, "CanEdit"    , True, DataSourceUpdateMode.OnPropertyChanged))

        Label1 .DataBindings.Add(New Binding("Text",    Me, "CanClone"   , True, DataSourceUpdateMode.OnPropertyChanged))
        Label3 .DataBindings.Add(New Binding("Text",    Me, "CanEdit"    , True, DataSourceUpdateMode.OnPropertyChanged))
    End Sub


End Class

无法100%确定GroupBox为什么会这样做,但由于您使用的是数据绑定,因此不应使用GroupBox.Enabled属性处理此问题。您的单击事件应该只执行
CanEdit=Not CanEdit
,以及
CanClone=Not CanClone
。无论如何都需要禁用组框,以便用户在某些活动进行时无法与其交互。我可以做一个丑陋的黑客,比如cacheCanClone=CanClone,disable,re-enable,CanClone=cacheCanClone,但我只想作为最后的手段来做。但是你在这里有竞争的力量。CanEdit和CanClone属性相对于父容器。两者都想影响按钮的Enabled属性。值得一提的是,当您使用面板代替GroupBox时,会发生相同的情况。为什么会有任何不同?这是同一个问题。你必须重新考虑你想怎么做。