【发布时间】:2011-02-18 07:14:18
【问题描述】:
我在使用 WPF 绑定时遇到了一个烦人的问题。基本上,我在 UserControl 的资源中声明了一个 FrameworkElement,但是当父 UserControl 的 DataContext 更改时,该项目似乎没有得到通知。
基本上,在我的 UserControl 中,我在 ItemTemplate 中有一个用于 ItemsControl 的弹出窗口。在那个弹出窗口中,我需要绑定到父视图的 ViewModel 中的某些东西,所以我想出了一个我认为很聪明的技巧。从 CollectionViewSource 中得到启发,我想我只需将我父母的视图模型绑定到一个资源,然后使用该资源从 DataTemplate 获取 ViewModel,如下所示:
<UserControl.Resources>
<cont:ViewModelSource Source="{Binding}" x:Key="ParentViewModel"/>
</UserControl.Resources>
这样以后我可以像这样使用它:
CommandParameter="{Binding ViewModel.OpenEntity, Source={StaticResource ParentViewModel}}"
这一切似乎都可以工作除了,当 UserControl 的 DataContext 被重置时,ViewModelSource 上的 DataContext 不会被重置。现在,我正在巧妙地完成这项工作:在 UserControl 的 DataContextChanged 事件的代码隐藏中设置资源的 DataContext。
我查看了 Reflector 以了解 CollectionViewSource 是如何做到这一点的,但它似乎并没有做任何特别的事情。
有人知道为什么会发生这种情况或我该如何解决吗?
【问题讨论】:
标签: wpf binding collectionviewsource