WPF TreeView HierarchicalDataTemplate绑定

时间:2014-03-07 12:24:15

标签: wpf xaml binding treeview hierarchicaldatatemplate

我有Server,其中包含Databases列表。 我有Database,其中包含TablesViews的列表。 我在Children上有一个名为Database的辅助属性,它由UnionTables之间的Views组成。

以下是我的TreeView Xaml,效果很好!除此之外,我希望在这些静态节点下列出TablesViews以及TablesViews的静态节点。我如何实现这一目标?

<TreeView Name="tvServer">
   <TreeView.Resources>

      <!-- Server -->
      <HierarchicalDataTemplate DataType="{x:Type ostsql:Server}" ItemsSource="{Binding Databases}">
         <StackPanel Orientation="Horizontal">
            <Image Width="16" Height="16" Margin="3,0" Source="/Ost.Applications.CodeGenerator.Application;component/Images/SqlServer.png" />
            <TextBlock Text="{Binding ConnectionString}" />
         </StackPanel>
      </HierarchicalDataTemplate>

      <!-- Database -->
      <HierarchicalDataTemplate DataType="{x:Type ostsql:Database}" ItemsSource="{Binding Children}">
         <StackPanel Orientation="Horizontal">
            <Image Width="16" Height="16" Margin="3,0" Source="/Ost.Applications.CodeGenerator.Application;component/Images/Database.png" />
            <TextBlock Text="{Binding Name}" />
         </StackPanel>
      </HierarchicalDataTemplate>

      <!-- Table -->
      <DataTemplate DataType="{x:Type ostsql:Table}">
         <StackPanel Orientation="Horizontal">
            <Image Width="16" Height="16" Margin="3,0" Source="/Ost.Applications.CodeGenerator.Application;component/Images/Table.png" />
            <TextBlock Text="{Binding QualifiedName}" />
         </StackPanel>
      </DataTemplate>

      <!-- View -->
      <DataTemplate DataType="{x:Type ostsql:View}">
         <StackPanel Orientation="Horizontal">
            <Image Width="16" Height="16" Margin="3,0" Source="/Ost.Applications.CodeGenerator.Application;component/Images/View.png" />
            <TextBlock Text="{Binding QualifiedName}" />
         </StackPanel>
      </DataTemplate>
   </TreeView.Resources>
</TreeView>

1 个答案:

答案 0 :(得分:0)

您的问题非常不清楚,并且没有向我们展示了所有相关代码。但是,似乎询问如何在Table中显示ViewTreeView个对象。为了在TreeView中显示节点,您必须在集合中具有绑定到TreeView.ItemsSource属性的数据的数据项。因此,很明显,您可以快速回答一些TableView个对象。

现在我只能假设你没有问这个问题来找出答案。我猜你是真的询问如何将来自不同类的对象组合成一个集合。答案也很简单。将来自不同类的项添加到一个集合中的方法是,您可以创建一个基类,您的各种数据类型类可以扩展,并使您的集合包含这些基类元素:

public class BaseDataType { ... }

public class Table : BaseDataType { ... }

public class View : BaseDataType { ... }

public class Database : BaseDataType { ... }

public class Server : BaseDataType { ... }

然后在您的视图模型中,您可以拥有此属性:

public ObservableCollection<BaseDataType> Items { get; set; }

...

Items.Add(new Table());
Items.Add(new View());
Items.Add(new Database());
Items.Add(new Server());

然后在XAML中:

<TreeView Name="tvServer" ItemsSource="{Binding Items}" ... />