我有一个带有可绑定属性的自定义控件: -
Private _Value As Object
<Bindable(True), ... > _
Public Property Value() As Object
Get
Return _Value
End Get
Set(ByVal value As Object)
_Value = value
End Set
End Property
任何时候,Value绑定的字段都会发生变化,我需要获取类型。
我在两个地方这样做。首先在OnBindingContextChanged: -
Protected Overrides Sub OnBindingContextChanged(ByVal e As System.EventArgs)
MyBase.OnBindingContextChanged(e)
RemoveHandler Me.DataBindings.CollectionChanged, AddressOf DataBindings_CollectionChanged
AddHandler Me.DataBindings.CollectionChanged, AddressOf DataBindings_CollectionChanged
Me.MyBinding = Me.DataBindings("Value")
If Me.MyBinding IsNot Nothing Then
Me.GetValueType(Me.MyBinding)
End If
End Sub
此外,我在这里,我正在为DataBindings.CollectionChanged事件添加一个处理程序。 这是我检索类型的第二个地方: -
Private Sub DataBindings_CollectionChanged(ByVal sender As Object, ByVal e As System.ComponentModel.CollectionChangeEventArgs)
If e.Action = CollectionChangeAction.Add Then
Dim b As Binding = DirectCast(e.Element, Binding)
If b.PropertyName = "Value" Then
Me.GetValueType(b)
End If
End If
End Sub
我需要第一个位置,因为直到InitializeComponent之后的一段时间才会触发BindingContextChanged事件。 如果以编程方式更改绑定字段,则需要第二个位置。
我在这里处理正确的事件,还是有更清洁的方法呢?
注意:我的GetValueType方法使用CurrencyManager.GetItemProperties ....等来检索类型。
干杯,
Jules
ETA:在这里要清楚,我想知道绑定字段何时发生了变化,而不是绑定字段值。
答案 0 :(得分:0)
听起来您正在寻找INotifyPropertyChange接口,该接口将自动通知绑定控件的更新。
http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx