コレクションが更新されたときに WPF ContextMenu データバインディングが期待どおりに更新されないのに、ItemTemplate はコンテキスト メニュー テキストを正しく表示しているのはなぜですか?
以下のコード内では、ObservableCollection を更新しようとしない場合に機能します。基礎となる ObservableCollection が更新されると、DataTemplate は問題なく更新され、期待どおりに新しい MenuItem テキストが表示されます。ただし、更新が発生した後、MenuItem.Tag は Nothing を返していますか?
データ バインドされた MenuItem.Tag は、コレクションが最初に読み込まれたときに機能しますが、更新後は機能しません。このエラーを見つける方法についてのアイデアはありますか? XAML コードの一部を以下に示します。
<ListBox ItemsSource="{Binding Source={StaticResource ListBoxViewSource}}">
<ListBox.ItemTemplate>
<DataTemplate>
<WrapPanel>
<WrapPanel.ContextMenu>
<ContextMenu>
<Separator/>
<MenuItem ItemsSource="{Binding Source={StaticResource ContextViewSource}}" ItemTemplate="{StaticResource DataTemplate}">
<MenuItem.Tag>
<Binding Path="ID" Source="{StaticResource ContextViewSource}"/>
</MenuItem.Tag>
更新 #1: この問題は、CollectionViewSource と、フィルタリングが発生して項目を削除した後に Filter が MenuItem.Tag バインディングを更新しないことに関連しているようです。コレクションが変更される CollectionViewSource.View.Refresh() を追加しましたが、それでも問題は解決しません。
更新 #2 INotifyPropertyChanged を既に実装していますが、これはフィルタリングの問題には役立ちません。CollectionViewSource のフィルターを削除すると、問題は発生しません。また、MenuItem.Tag バインディングにコンバーターを追加しましたが、これはフィルタリングが適用された後に呼び出されず、MenuItem.Tag が Nothing に設定されます。