TreeView有时不会更新

时间:2011-12-21 17:32:41

标签: wpf mvvm treeview observablecollection

我有一个TreeView,它绑定到我的ViewModel中的ObservableCollection。我有一个问题,如果我将项目添加到ObservableCollection,有时它不会显示在GUI中。

我已经调试过,发现项目确实已添加,而CollectionChanged事件确实会在observable集合上被触发。我的GUI的其他部分甚至更新以反映新添加和选择的项目。唯一的问题是新项目没有出现在TreeView中。

这有点奇怪,因为有时它会出现,有时它会闪烁然后消失,有时它根本不会显示出来。有什么想法吗?

编辑:

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。当我第一次打开文件并添加所有现有文件时,它会显示正常。问题是当我尝试创建一个新的。

1 个答案:

答案 0 :(得分:0)

您是否可以从单独的线程或任务修改集合?