У меня проблемы с использованием DataBindings
в форме Windows / пользовательском элементе управления. Например:
Создайте форму окна, поместите на нее одно текстовое поле и поместите две кнопки. Код за формой:
Imports System.ComponentModel
Public Class Form1
Implements System.ComponentModel.INotifyPropertyChanged
Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Private Sub NotifyPropertyChanged(ByVal info As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
Private mSomeProperty As String
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.TextBox1.DataBindings.Add("text", Me, "SomeProperty", False, DataSourceUpdateMode.OnPropertyChanged)
End Sub
Public Property SomeProperty() As String
Get
Return mSomeProperty
End Get
Set(ByVal value As String)
mSomeProperty = value
NotifyPropertyChanged("SomeProperty")
End Set
End Property
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(Me.SomeProperty)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.SomeProperty = "Set in code - see it on the UI?"
End Sub
End Class
Если вы введете что-то в текстовое поле и нажмете Button1
, вы получите окно сообщения с текстом свойства в нем. Однако, если вы нажмете Button2
(который устанавливает свойство в коде), а затем снова нажмете Button1
, вы увидите, что хотя свойство действительно было установлено в коде, текстовое поле не отражает изменения.
Что мне не хватает, пожалуйста!?
РЕДАКТИРОВАТЬ : обновлен код для обеспечения реализации INotifyPropertyChanged
. Теперь это работает как нужно.