2011-12-21 6 views
0

У меня есть TreeView, связанный с ObservableCollection в моей модели ViewModel. У меня проблема, если я добавлю элемент в ObservableCollection, иногда он не отображается в графическом интерфейсе.TreeView иногда не обновляется

Я отлаживал и обнаружил, что элемент действительно добавлен, и событие CollectionChanged действительно активируется в наблюдаемой коллекции. Другие части моего графического интерфейса даже обновляют, чтобы отразить недавно добавленный и выбранный элемент. Единственная проблема заключается в том, что новый элемент не отображается в TreeView.

Это немного странно, потому что иногда оно появляется, иногда оно мерцает, а затем уходит, а иногда оно вообще не появляется. Есть идеи?

EDIT:

TreeView XAML:

<TreeView Name="cedarTreeView" 
       ItemsSource="{Binding CurrentFiles}" 
       ItemTemplate="{StaticResource MyFileTemplate}" 
       VirtualizingStackPanel.IsVirtualizing="True" 
       VirtualizingStackPanel.VirtualizationMode="Recycling"> 

     <TreeView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel /> 
      </ItemsPanelTemplate> 
     </TreeView.ItemsPanel> 

     <TreeView.ItemContainerStyle> 
      <Style TargetType="TreeViewItem"> 
       <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
       <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />      
       <Setter Property="FontSize" Value="12" /> 
       <Setter Property="AllowDrop" Value="True" /> 
      </Style> 
     </TreeView.ItemContainerStyle> 
    </TreeView> 

DataTemplate:

<HierarchicalDataTemplate x:Key="MyFileTemplate" 
           ItemTemplate="{StaticResource QualifierTemplate}" 
           ItemsSource="{Binding Qualifiers, Converter={StaticResource SortByNameConverter}}"> 
     <HierarchicalDataTemplate.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
       <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
       <Setter Property="Visibility" Value="{Binding IsVisible, Converter={StaticResource BoolToVisConverter}}" /> 
      </Style> 
     </HierarchicalDataTemplate.ItemContainerStyle> 

     <TextBlock Text="{Binding Name, Mode=OneWay}" ToolTip="{Binding Name, Mode=OneWay}" Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=TreeView}}"> 
      <TextBlock.ContextMenu> 
       Some Context Menu Stuff Here 
      </TextBlock.ContextMenu> 
     </TextBlock> 
    </HierarchicalDataTemplate> 

Я добавляю к Qualifiers ObservableCollection. Он отлично отображает их при первом открытии файла и добавлении всех существующих. Проблема в том, что я пытаюсь создать новую.

+0

Можете ли вы показать нам свой TreeView XAML и как он связан с вашей структурой данных? – Rachel

+0

Что произойдет, если вы удалите использование 'SortByNameConverter'? –

+0

То же самое происходит с или без SortByNameConverter – KrisTrip

ответ

0

Возможно, вы меняете коллекцию из отдельного потока или задачи?

+0

Оказывается, я делал другую модификацию в коллекции в другом потоке, о котором я забыл (я очищал фильтр в коллекции). – KrisTrip

Смежные вопросы