0

チェックボックスを含む小さな UserControl を作成し、それをクラスのブール値プロパティに DataBind しようとしました。BindingのDataSourceUpdateModeはOnPropertyChangedに設定されます。残念ながら、それは期待どおりに機能しません。

クラスプロパティを変更すると、チェックボックスはすぐに反応しますが、その逆ではありません。チェックボックスをクリックしても、クラス プロパティはすぐには変更されません。classproperty は、ユーザーコントロールを離れたとき (pe が別のコントロールに入ったとき) にのみ更新されます。チェックボックスは、離れた後にのみ検証されるためだと思います。しかし、なぜ?

どんなアイデアでも大歓迎です!

よろしく

キリスト教徒

ここにいくつかの簡単なコードがあります (c&p ではなく、デバッガーは実際のコードでエラーを表示しません):

クラス:

Imports System.ComponentModel
Public Class _testClass

    Implements INotifyPropertyChanged
    Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

    Private Sub NotifyPropertyChanged(ByVal info As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
    End Sub

    Private _Status As Boolean
    Public Property Status() As Boolean
        Get
            Return _Status
        End Get
        Set(ByVal value As Boolean)
            _Status = value
            NotifyPropertyChanged("Status")
            Debug.WriteLine("CLASS " & value)
        End Set
    End Property

End Class

ユーザー コントロール:

Imports System.ComponentModel
Public Class _testcontrol

    Public Event Valuechanged As EventHandler

    Public Property OnOff() As Boolean
        Get
            Return CheckBox1.Checked
        End Get
        Set(ByVal value As Boolean)
            CheckBox1.Checked = value
            Debug.WriteLine("PROPERTY " & value)
        End Set
    End Property


    Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        RaiseEvent Valuechanged(sender, e)
        Debug.WriteLine("EVENT")
        OnOff = CheckBox1.Checked
    End Sub
End Class

データバインディング:

Public Class Form1
    Dim testclass As New _testClass

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Testcontrol.DataBindings.Add(New Binding("OnOff", Me.testclass, "Status", True, DataSourceUpdateMode.OnPropertyChanged))
    End Sub

End Class
4

2 に答える 2