1

コレクションが更新されたときに 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 に設定されます。

4

2 に答える 2

-1

オブザーバブル コレクションは、アイテムがコレクションに追加またはコレクションから削除されたときにプロパティ変更通知イベントを送信します。アイテムのコンテンツが変更されたときは更新を送信しません。自分で通知を送信してみて、WPF ビューが更新されるかどうかを確認してください。

于 2009-08-28T15:10:04.760 に答える
-1

StaticResource を使用する代わりに、役立つ DynamicResource を使用してください。次のように

ItemsSource="{Binding Source={DynamicResource ListBoxViewSource}}"
于 2012-12-05T19:33:23.593 に答える