Как я могу заставить DataBindings быть двусторонними (не только при изменении пользовательского интерфейса, но и при изменении свойства в коде)? - PullRequest
0 голосов
/ 11 ноября 2010

У меня проблемы с использованием 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. Теперь это работает как нужно.

1 Ответ

1 голос
/ 11 ноября 2010

Вам необходимо реализовать интерфейс INotifyPropertyChanged .

Существует множество вопросов , которые могут помочь вам начать работу, если MSDN вам не поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...