wpf - 为什么在定义TreeView.ItemTemplate后TreeView不会自动为子节点选择DataTemplates?

标签 wpf mvvm treeview datatemplate icollectionview

我不明白wpf在这里做什么(在C#中使用.NET 3.5):

在我的应用程序资源中,我为不同类型的ViewModels定义了几个DataTemplates和HierarchicalDataTemplates。到目前为止,此方法运行良好,并且“窗口”中的TreeView可以按预期显示节点。我不得不说,每个ViewModel中的所有Childelements都是ICollectionView。
现在,我决定使用ICollectionView的特长来对TreeView的“Rootnodes”进行分组,排序和过滤。
我使TreeView看起来像这样:

<TreeView ItemsSource="{Binding Path=Elements.Groups}">
  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Path=Items}" ItemTemplate="{StaticResource SOMEITEMTEMPLATENAME}">
      <TextBlock Text="{Binding Path=Name}"/>
    </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>

ViewModel看起来像这样:
class RootViewModel
  : INotifyPropertyChanged
{

  public ICollectionView Elements
  {
     get
     {
       ICollectionView view = CollectionViewSource.GetDefaultView(_elementsFromModel.Select(x => new FirstChildViewModel(x));
       view.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
       view.Filter = delegate(Object x) { /*do some filter stuff here*/ };

       return view;
     }
  }
}

class FirstchildViewModel
  : INotifyPropertyChanged
{
  /*some other stuff here*/

  public ICollectionView Items
  {
    get;
  }
}

现在的问题是TreeView不会自动为更深的子元素选择正确的模板。那么,这有什么问题呢?

最佳答案

您已经明确定义了 TreeView.ItemTemplate ,因此WPF将仅使用该ItemTemplate。您必须为类型定义 HierarchicalDataTemplate ,该类型与Groups元素类型相对应。

但是定义组的直接方法是定义GroupStyle属性。您可以在msdn上了解有关ICollectionView功能的更多信息

关于wpf - 为什么在定义TreeView.ItemTemplate后TreeView不会自动为子节点选择DataTemplates?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14475132/

相关文章:

WPF DataGridTextColumn 无法为 float 据键入点

wpf - 从 ListView 到其父级的冒泡滚动事件

WPF MVVM 确定模型何时更改集合中的项目

javascript - 基本了解javascript中的函数和声明

c# - 在选项卡项中为 View 设置数据上下文

delphi - 仅当单击 TreeView 节点时才执行事件

java - 以编程方式编辑 TreeView/TreeItem

c# - WMI 查询中的转义字符出现问题

c# - 属性更改时未更新列表框项目

java - 无法单击 TreeView 中的元素 - Selenium webdriver java