【问题标题】:WPF TreeView HierarchicalDataTemplate BindingWPF TreeView HierarchicalDataTemplate 绑定
【发布时间】:2014-03-07 12:24:15
【问题描述】:

我有Server,它有一个Databases 的列表。 我有Database,其中有Tables 和Views 的列表。 我在Database 上有一个名为Children 的助手属性,它由Tables 和Views 之间的Union 组成。

下面是我的TreeView Xaml,效果很好!除了,我想有一个Tables 和Views 的静态节点,Tables 和Views 在这些静态节点下列出。我如何做到这一点?

<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>

【问题讨论】:

  • “静态节点”是什么意思?你的意思是你想让你的 TreeView 的根有 Server、Tables 和 Views 节点?
  • 我希望我的数据库节点默认具有表和视图。表或视图节点将分别列出表和视图(如果有)。与 SQL Server 管理工作室的做法非常相似。

标签: wpf xaml binding treeview hierarchicaldatatemplate


【解决方案1】:

您的问题非常不清楚,您没有向我们展示了所有相关代码。但是,您似乎在问如何在TreeView 中显示您的Table 和View 对象。为了在TreeView 中显示节点,您必须在集合中有一个数据项,该数据项是绑定到TreeView.ItemsSource 属性的数据。因此,很明显,快速的答案是让您将一些 Table 和 View 对象添加到您的集合中。

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

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}" ... />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多