WPF DataContext Binding& DataContextChanged事件

时间:2014-08-14 06:43:21

标签: wpf vb.net user-controls wpf-controls

我遇到了DataContextChanged事件未按预期触发的问题。

在我的主窗口XAML中,我将用户控件声明为:

<UserControls:PeopleView DataContext="{Binding People}"></UserControls:PeopleView>

在我的主窗口代码背后我有“人物”#39;数据源声明为:

Public Property People() As PersonCollection
    Get
        Return _People
    End Get
    Set(value As PersonCollection)
        _People = value
        UpdateProperty("People")
    End Set
End Property

在我的PeopleView用户控件中,我有以下内容:

Public Sub OnDataContextChanged() Handles Me.DataContextChanged

    Console.WriteLine("Data context changed")

End Sub

最初渲染主窗口时,PeopleView DataContext绑定到&#39; People&#39;属性第一次,事件按预期触发。但是,当我随后更改“人物”时,从主窗口内的不同集合的属性,DataContextChanged事件不会触发:

Me.People = New PeopleCollection

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您似乎将INotifyPropertyChanged界面与DataContextChanged事件混淆。它是INotifyPropertyChanged接口,它会通知您对People属性的属性进行更改,而不是DataContextChanged事件...请注意,这会更改{的值{1}}属性并且设置People

DataContext

正在更改Me.People = New PeopleCollection 属性:

DataContext

答案 1 :(得分:0)

我遇到了同样的问题。我将 UserControl 的 DataContext 绑定到属性向导。我有从 DependencyObject 和 DataContextChanged 派生的向导很好地触发。然后我切换到使用接口检索下一个向导,DataContextChanged 停止触发。每个向导派生自 WizardBase,后者派生自 DependencyObject,但由于 DataContext 看到了一些东西,即接口,它不是从 DependencyObject 派生的,它忽略了更改。当我将界面转换为 WizardBase 时,一切正常。那么问题可能出在 PeopleCollection 上。