如何在xaml中显示不同对象类型的树形视图?

时间:2018-08-02 10:15:06

标签: vb.net xaml

我对使用VB.NET和WPF / XAML的项目深感兴趣。我有C#的背景,所以VB没问题。我没有XAML的经验,并且发现绑定确实令人困惑。 我相信一旦您理解它,一切都说得通,但我根本不了解。

已为我提供了分层数据结构,我需要将其显示为树状结构。树的每一层上的节点都是不同的类型,那么如何绑定和显示它呢?

我拥有的数据结构是这样的。为了简化起见,我已经对其进行了简化,并删除了所有“获取/设置”内容。

Public Class ComponentProperties
    Public Property Name As String
    Public Property Value As Double
    Public Property OldValue As Double
    Public Property UpdateValue As Boolean
End Class

Public Class Component
    Public Property Name As String
    *<other attributes>*
End Class

Public Class Design
    Public Property Name As String
    *<other attributes>*
End Class

Public listOfChanges Dictionary(Of Design, Dictionary(Of Component, List(Of ComponentProperties)))

我需要以与此类似的格式来显示它:

Design Name
    Component Name
        "Changed Component Properties:"
        Name       Value       Old Value     [x]
        Name       Value       Old Value     [x]
        Name       Value       Old Value     [x]
        Name       Value       Old Value     [x]

每个ComponentProperty都有一行,[x]表示一个复选框,该复选框映射到Boolean UpdateValue属性。 这是到目前为止使用XAML的地方,但是我不知所措,无法确定如何显示需要显示的ComponentProperties数据:

<TreeView ItemsSource="{Binding listOfChanges}">
  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Value}">
      <Border BorderBrush="{StaticResource Main_Light}" BorderThickness="1" CornerRadius="5">
        <StackPanel>
          <TextBlock Text="{Binding Key.Name.Value}"/>
        </StackPanel>
      </Border>
    </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>

这将按预期显示树状视图,如下所示:

[MyDesign]
    [Widget1]
        []
    [Widget2]
        []
    [Widget3]
        []

我什至不知道为什么要在组件名称下面找到空节点[]。 除此之外,该结构看起来是正确的。如何绑定并显示每个组件的ComponentProperty列表? 嵌套的字典/字典/列表结构已强加给我。这可能不是最好的方法,但这是我必须使用的方法。

已添加: 我认为我需要为树中的每种类型的节点提供一个HierarchicalDataTemplate。我尝试编写3个不同的HierarchicalDataTemplates并将它们放在TreeView.Resources部分中,以便TreeView可以为每种节点类型选择正确的模板。每个HierarchicalDataTemplate都有一个类似这样的属性:

DataType="{x:Type local:Design_Class}"

但是,我仍然无法显示任何有用的东西。我认为这可能是由于我对所描述的结构所需的ItemsSource和Binding缺乏了解。

0 个答案:

没有答案