2009-08-28 58 views
1

爲什麼我的WPF ContextMenu數據綁定在更新集合時沒有按預期更新,但是ItemTemplate正確顯示上下文菜單文本?爲什麼WPF Databinding在收集過濾後沒有更新?

在下面的代碼中,當我不嘗試更新ObservableCollection時,可以使用它。當更新底層ObservableCollection時,DataTemplate更新沒有問題,並按預期顯示新的MenuItem文本。但是,刷新後MenuItem.Tag沒有返回什麼?

數據綁定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上的過濾器,則不會發生該問題。我還在MenuItem.Tag綁定中添加了一個轉換器,並且在應用過濾並且將MenuItem.Tag設置爲Nothing之後不會調用該轉換器。

+0

您是否認爲這一個呢? – 2013-05-12 19:09:42

回答

0

當項目添加到集合中或從集合中刪除項目時,observable集合發送屬性更改通知事件,但項目內容更改時不發送更新。嘗試自己發送通知,並查看您的WPF視圖是否更新。

+0

謝謝,但我已經實施INotifyPropertyChanged,這沒有幫助。 – Luke 2009-08-29 01:02:17

0

而不是使用StaticResource使用DynamicResource它可以幫助你。如下所示:

ItemsSource="{Binding Source={DynamicResource ListBoxViewSource}}"