Tag: hierarchicaldatatemplate

HierarchicalDataTemplate不起作用

我试图使用HierarchicalDataTemplate递归创建包含项目的扩展器,但是当我使用HierarchicalDataTemplate时,我只获得显示的第一级项目。 如果您需要任何信息,请告诉我。 如果我是手写的话,那就是xaml的样子: etc…… 这是我到目前为止所拥有的。 XAML: 数据类: class TopViewModel { ObservableCollection _sections = new ObservableCollection(); public ObservableCollection Sections { get { return _sections; } set { _sections = value; } } } public class SectionViewModel { ObservableCollection _materials = new ObservableCollection(); ObservableCollection _subSections = new ObservableCollection(); Section _section; public Section Section { get { return […]

如何在单个Silverlight TreeView节点中拥有多种类型的子节点?

短款: 我必须显示不同类型的项目的层次结构( TreeView ),并且不确定如何在Silverlight中干净地执行此操作。 在WPF中,可以直接根据类型定义模板( HierarchicalDataTemplate ),但Silverlight中不提供此function。 在Silverlight中,您必须将相同的模板应用于特定节点的所有子节点,因此您最终会使用一次单个怪物模板来处理每个可能类型的节点,并应用于每个节点。 长版(带示例): 为了给出一个更具体(但是做作)的例子,考虑各种文件夹中的档案树视图,其中每个档案可以包含照片,歌曲和其他档案。 每个文件夹可能包含多个子文件夹和存档。 |-Folder |-Folder |-Folder |-Archive | Photo1 | Photo2 | Song1 | Song2 |-Archive | Photo1 | Song1 |-Archive | Photo1 | Photo2 | Photo3 树中的每种类型(文件夹,存档,照片,乐曲)的显示方式都不同。 显而易见的解决方案似乎是为要显示的每种类型的项创建HierarchicalDataTemplate 。 不幸的是,我找不到一个好方法,因为你似乎必须为一个节点的所有子节点指定一个模板类型( ItemsSource={Binding …}, ItemsTemplate={StaticResource TemplateForAllChildren} )。 此要求导致模板滚雪球…存档可以将照片,歌曲和档案作为子项。 由于必须将单个模板应用于所有子项,因此该模板必须能够处理照片,歌曲和档案。 同样,文件夹的模板必须能够处理文件夹和档案,而档案模板现在卡在其中的照片和歌曲,所以它最终成为一个可以处理照片,歌曲,档案和文件夹的巨型模板。 随着更多类型的添加,它们也被集中到一个巨大的模板中。 有没有办法干净地完成这项工作,而不会累积一个巨型模板(和相关的节点视图模型),因为不同的类型被添加到树中? 谢谢! 一些澄清: 感谢到目前为止的答案,但我认为他们可能会让我回到最初的问题。 我可能误解了答案。 考虑TreeView显示: 对于歌曲:带有艺术家/标题的滚动文本框和播放按钮 […]

当从DataTemplateSelector显式返回DataTemplate时,为什么DataTemplate不能绑定到接口?

我创建了一个DataTemplateSelector,它使用已知接口的集合进行初始化。 如果传入选择器的项目实现其中一个接口,则返回关联的数据模板。 首先,这是有问题的ICategory接口…… public interface ICategory { ICategory ParentCategory { get; set; } string Name { get; set; } ICategoryCollection Subcategories { get; } } 这是基于基类或接口而不仅仅是特定具体类匹配的DataTemplateSelector … [ContentProperty(“BaseTypeMappings”)] public class SubclassedTypeTemplateSelector : DataTemplateSelector { private delegate object TryFindResourceDelegate(object key); public override DataTemplate SelectTemplate(object item, DependencyObject container) { var frameworkElement = container as FrameworkElement; foreach(var baseTypeMapping […]

在WPF TreeView中对子对象进行分组

我试图让我的树视图按照它们的类别对类似项目的集合进行分组。 为了保持通用性,我的对象层次结构可能如下所示: 对象 对象组#1 项目#1(类型’A’) 项目#2(类型’A’) 项目#3(类型’B’) 项目#4(类型’B’) 现在我的TreeView显示这些对象与对象模型完全一样,但我想要做的是为每个对象类型插入一个TreeView节点,使它看起来像这样: 对象 对象组#1 A型 项目#1 项目#2 B型 项目#3 项目#4 我在这里看到一个类似的问题,有人建议有两个独立的HierarchicalDataTemplates所以我创建了一个’Object Group#1’级别,其中包含一个带有类型列表的TreeView,但这实际上是笨拙的,因为它是一个完整的单独TreeView在一些节点内。 我也一直在尝试使用CollectionViewSource来过滤掉每个类别中的项目,但这对我来说并不是很好,因为我无法弄清楚如何显示它们。 我想我的问题归结为:我如何将HierarchicalDataTemplate组作为子项? 如果有人能指出我正确的方向,我会非常感激。 我可以发布一些代码,如果有人想看,但我真的只是想弄清楚如何做我想要的,所以我的代码现在只是一个非常直接的数据绑定树视图。

TreeView,HierarchicalDataTemplate和递归数据

对于我的treeview,我有两个提供ItemsSource的不同类。 public class TreeViewModel : ViewModelBase { public ObservableCollection Items { get; set; } } public class NodeViewModel : ViewModelBase { public string Id { get; set; } public string Name { get; set; } public ObservableCollection Children { get; set; } } 现在我希望我的TreeView在TreeViewModel中显示Items并显示NodeViewModel提供的分层数据。 这是我的XAML 试图提供Items作为TreeView的ItemsSource 。 如果显示任何内容,它不会按层次结构显示数据。 我也尝试使用ItemTemplate而不是TreeView.Resources 。 怎么了? 也许问题是第一个TextBlock Text Binding ? […]