Я создаю пользовательский элемент, для которого мне нужно создать привязку данных.
Давайте рассмотрим следующий класс.Для простоты давайте использовать TextControl.(Реальный элемент, который я создаю, не содержит никакого текстового элемента управления. Это только для тестирования)
Public Class GIce
Implements IBindableComponent
Implements INotifyPropertyChanged
'The control used only for testing. (I'm avoiding making the object GIce inherit from the TextControl to make sure no interface is already implemented)
Public TextEdit As TextEdit
'Constructor
Public Sub New()
Me.TextEdit = New TextEdit
End Sub
'The main property to be used for data binding
Property Content
Get
Return Me.TextEdit.Text
End Get
Set(value)
If IsDBNull(value) Then
Me.TextEdit.Text = ""
Else
Me.TextEdit.Text = value
End If
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Content"))
End Set
End Property
'Binding context
Private BindingContext_ As BindingContext
Public Property BindingContext As BindingContext Implements IBindableComponent.BindingContext
Get
If IsNothing(Me.BindingContext_) Then
Me.BindingContext_ = New BindingContext
End If
Return Me.BindingContext_
End Get
Set(value As BindingContext)
Me.BindingContext_ = value
End Set
End Property
'Databindings
Private DataBindings_ As ControlBindingsCollection
Public ReadOnly Property DataBindings As ControlBindingsCollection Implements IBindableComponent.DataBindings
Get
If IsNothing(Me.DataBindings_) Then
Me.DataBindings_ = New ControlBindingsCollection(Me)
End If
Return Me.DataBindings_
End Get
End Property
'Property changed event
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
Public Property Site As System.ComponentModel.ISite Implements System.ComponentModel.IComponent.Site
'Disposing support
Public Event Disposed(sender As Object, e As EventArgs) Implements System.ComponentModel.IComponent.Disposed
#Region "IDisposable Support"
...
#End Region
'Unimportant property. Used only for testing
Public Property Parent
Get
Return TextEdit.Parent
End Get
Set(value)
TextEdit.Parent = value
End Set
End Property
'Unimportant property. Used only for testing
Public Property Location
Get
Return TextEdit.Location
End Get
Set(value)
TextEdit.Location = value
End Set
End Property
End Class
Затем я использую этот объект в такой форме:
Public Class Form3
Dim DataTable As DataTable
Dim GIce As GIce
Public Sub New()
GIce = New GIce
GIce.parent = Me
GIce.location = New Point(50, 50)
End Sub
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
DataTable = GetDataTable() 'Basically datatable has two columns C1 and C2 and filled with string data in several rows
'Create the binding
Me.TextEdit1.DataBindings.Add(New Binding("Text", DataTable, "C1")) 'This control is created to make sure binging works and the datanavigator moves properly the position of the currency manager
Me.GIce.DataBindings.Add(New Binding("Content", DataTable, "C2"))
'Create the data navigator
Me.DataNavigator1.DataSource = DataTable
End Sub
end class
При выполнении привязка на моем пользовательском элементе управления не работает.Если я перемещу позицию менеджера валют с помощью Навигатора данных, значение, содержащееся в моем элементе управления, не изменится.Также при вводе чего-либо вручную в элемент управления изменение не отражается в таблице данных.
У кого-нибудь есть идеи, почему оно не работает?