我遇到了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
我做错了什么?
答案 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 上。