2009-08-28 4 views
1

컬렉션이 업데이트 될 때 WPF ContextMenu 데이터 바인딩이 예상대로 업데이트되지 않지만 ItemTemplate이 컨텍스트 메뉴 텍스트를 올바르게 표시하는 이유는 무엇입니까?컬렉션이 필터링 된 후에 WPF Databinding이 업데이트되지 않는 이유는 무엇입니까?

ObservableCollection을 업데이트하지 않을 때 아래 코드에서이 코드가 작동합니다. 기본 ObservableCollection이 업데이트되면 DataTemplate이 문제없이 업데이트되고 새 MenuItem 텍스트가 예상대로 표시됩니다. 그러나 Refresh가 발생하면 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에서 필터를 제거하면 문제가 발생하지 않습니다. MenuItem.Tag 바인딩에 변환기를 추가했는데 필터링을 적용한 후에 호출되지 않고 MenuItem.Tag가 Nothing으로 설정되었습니다.

+0

이 내용을 파악 했습니까? –

답변

0

관찰 가능 모음은 항목이 모음에 추가되거나 제거 될 때 속성 변경 알림 이벤트를 보내고 항목의 내용이 변경되면 업데이트를 보내지 않습니다. 알림을 직접 보내고 WPF보기 업데이트 여부를 확인하십시오.

+0

고마워,하지만 이미 INotifyPropertyChanged를 구현했는데 이것이 도움이되지 않습니다. – Luke

0

StaticResource 대신 DynamicResource를 사용하면 도움이됩니다. 다음과 같이

ItemsSource="{Binding Source={DynamicResource ListBoxViewSource}}" 
관련 문제