我不明白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/