【问题标题】:Using a HierarchicalDataTemplate to create a TreeView with child nodes of different UI Controls使用 HierarchicalDataTemplate 创建具有不同 UI 控件的子节点的 TreeView
【发布时间】:2014-07-15 15:51:07
【问题描述】:

我正在尝试创建一个TreeView,它允许textBlockcomboBox 类型的子节点。这是一张图片:

我相信这是一个可以通过使用 HierarchicalDataTemplate 来解决的问题,因为 xaml 是我将指定我使用的 UI 控件的代码区域。到目前为止,我已经尝试使用我的HierarchicalDataTemplate 实现StackPanel,如下所示:

<HierarchicalDataTemplate DataType="{x:Type data:DataModel}" ItemsSource="{Binding Children}">
    <StackPanel>
        <TextBlock Text="{Binding DisplayName}" />
        <ComboBox ItemsSource="{Binding CommandCollection}" />
    </StackPanel>
</HierarchicalDataTemplate>

但是我没有得到正确的解决方案,因为StackPanel 基本上是在设置每个节点,以便它们同时包含textBlockcomboBox。这是一个问题,因为每个子节点要么是textBlock,要么是comboBox,绝不是两者。如何设置HierarchicalDataTemplate 允许TreeView 子节点为textBlockscomboBoxes?如果您想详细了解我的TreeView 是如何实现的,或者想查看更多代码,请告诉我。

可以在herehere 找到此问题的一些背景参考。

【问题讨论】:

    标签: c# wpf xaml treeview hierarchicaldatatemplate


    【解决方案1】:

    通常最好使用各自的数据模板模板不同类型的数据。这可以通过将模板放在TreeView.Resources 中并使用DataTemplate.DataType 属性来隐式实现。

    这里是一个例子:[Link]

    唯一不同的是您将使用分层模板并将模板的ItemsSource分别绑定到包含子项的属性。

    【讨论】:

    • 我现在使用的数据类型是我的TreeView 的数据模型。我知道当显示TextBlock 时,它通常显示string,而ComboBox 在大多数情况下会显示ObservableCollection&lt;T&gt;。因此,我不明白我会用什么来代替我的数据模型。
    • @Ericafterdark:使用包含必要信息的自定义类,例如StringTreeItem 将包含一个字符串属性,ComboTreeItem 将包含一个用于选定值的属性,另一个包含可能项的列表。如果您现在只有一种类型,则需要根据您拥有的任何标准使用这些相应的类型将您的结构映射到 at 树(如果没有,您在任何情况下都会遇到问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多