チェックボックスを含む小さな 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