【问题标题】:TreeView Sometimes Not UpdatedTreeView 有时未更新
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 原来我在另一个我忘记的线程中对集合进行了不同的修改(我正在清除集合上的过滤器)。
猜你喜欢
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多