绑定更新之前触发自定义路由事件

时间:2018-08-03 12:24:06

标签: wpf vb.net binding routed-events

我为UserControl创建了一个基类,在其中定义了以下路由事件

Public Shared ReadOnly ItemValueChangedEvent As RoutedEvent = EventManager.RegisterRoutedEvent("ItemValueChanged", RoutingStrategy.Bubble, GetType(EditValueChangedEventHandler), GetType(BaseControl))

Public Custom Event ItemValueChanged As EditValueChangedEventHandler
    AddHandler(value As EditValueChangedEventHandler)
        [AddHandler](ItemValueChangedEvent, value)
    End AddHandler
    RemoveHandler(value As EditValueChangedEventHandler)
        [RemoveHandler](ItemValueChangedEvent, value)
    End RemoveHandler
    RaiseEvent(sender As Object, e As EditValueChangedEventArgs)
        Dim newEventArgs As EditValueChangedEventArgs = New EditValueChangedEventArgs(e.OldValue, e.NewValue) With {.RoutedEvent = ItemValueChangedEvent}
        [RaiseEvent](newEventArgs)
    End RaiseEvent
End Event

然后我定义了一个可重写的子对象,以便能够从后代引发事件:

Protected Overridable Sub OnItemChanged(sender As Object, e As EditValueChangedEventArgs)
    RaiseEvent ItemValueChanged(sender, e)
End Sub

在我的后代UserControl中,我有一个ComboBox绑定到依赖项属性

 Public Shared ReadOnly ItemProperty As DependencyProperty =
                       DependencyProperty.Register("Item",
                       GetType(CustomItem), GetType(DescendantControl),
                       New UIPropertyMetadata(Nothing))

Public Property Item As CustomItem
    Get
        Return GetValue(ItemProperty)
    End Get

    Set(ByVal value As CustomItem)
        SetValue(ItemProperty, value)
    End Set
End Property

然后我像这样覆盖基类子:

Protected Overrides Sub OnItemChanged(sender As Object, e As EditValueChangedEventArgs)
    MyBase.OnItemChanged(sender, e)
End Sub

在使用UserControl的窗口中,我已将Item属性绑定到具有Mode =“ TwoWay”和UpdateSourceTrigger =“ PropertyChanged”的ViewModel上的属性。

当我在ComboBox中选择一个项目时,将在更新ViewModel属性之前引发该事件,并且除非将焦点从ComboBox移开,否则绑定不会触发。

0 个答案:

没有答案
相关问题