【发布时间】:2012-01-25 12:07:47
【问题描述】:
我有一个绑定到我的 ViewModel 中的 ObservableCollection 的 TreeView。我有一个问题,如果我将一个项目添加到 ObservableCollection,有时它不会显示在 GUI 中。
我已经调试并发现该项目确实被添加并且 CollectionChanged 事件确实在可观察集合上被触发。我的 GUI 的其他部分甚至会更新以反映新添加和选择的项目。唯一的问题是新项目没有出现在 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>
数据模板:
<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>
我正在添加到限定符 ObservableCollection。当我第一次打开文件并添加所有现有文件时,它会很好地显示它们。问题是当我尝试创建一个新的时。
【问题讨论】:
-
您能否向我们展示您的 TreeView XAML 以及它是如何绑定到您的数据结构的?
-
如果你删除
SortByNameConverter的使用会发生什么? -
无论有没有 SortByNameConverter,都会发生同样的事情
-
您是否正在从单独的线程或任务中修改集合?
-
啊,原来我在另一个我忘记的线程中对集合进行了不同的修改(我正在清除集合上的过滤器)。 @JoelLucsy - 添加为答案,我会接受
标签: wpf mvvm treeview observablecollection