2009-08-28 10 views
1

コレクションが更新されたときにWPF ContextMenuデータバインディングが正常に更新されないのはなぜですか?ただし、ItemTemplateはコンテキストメニューのテキストを正しく表示していますか?コレクションがフィルタ処理された後、WPF Databindingが更新されないのはなぜですか?

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に関連すると思わ及びフィルターは、フィルタリングが発生した項目を削除した後に結合MenuItem.Tagを更新していません。 CollectionViewSource.View.Refresh()を追加しましたが、コレクションは変更されますが、これはまだ問題を解決しません。

更新#2私は既にフィルタリングの問題に役立たないINotifyPropertyChangedを実装しています。 CollectionViewSourceでFilterを削除すると、問題は発生しません。また、MenuItem.Tagバインディングにコンバーターを追加しました。これは、フィルターが適用された後に呼び出されず、MenuItem.TagがNothingに設定されます。

+0

これはどれですか? –

答えて

0

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

+0

ありがとうございますが、私は既にINotifyPropertyChangedを実装していますが、これは役に立ちません。 – Luke

0

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

ItemsSource="{Binding Source={DynamicResource ListBoxViewSource}}" 
関連する問題