WPF バインディングで厄介な問題が発生しています。基本的に、UserControl のリソースで FrameworkElement を宣言しますが、親の UserControl の DataContext が変更されたときに、その項目が通知されないようです。
基本的に、私の UserControl には、ItemsControl の ItemTemplate に Popup があります。その Popup では、親ビューの 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 を設定します。
CollectionViewSource がこれを行う方法を確認するために Reflector を調べましたが、特別なことはしていないようです。
なぜこれが起こっているのか、どうすれば修正できるのか誰にも分かりますか?