2014-03-07 132 views
0

我有Server,其中有Databases列表。 我有Database它有一個列表TablesViews。 我有Database稱爲Children一個輔助屬性,它由一個UnionTablesViews之間。WPF的TreeView HierarchicalDataTemplate綁定

下面是我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> 
+0

你是什麼意思的「靜態節點」?你的意思是你想讓你的TreeView的根具有服務器,表和視圖節點嗎? –

+0

我希望我的數據庫節點默認具有表和視圖。表或視圖節點將分別列出表和視圖,如果有的話。與SQL Server Mnagement工作室非常類似。 – c0D3l0g1c

回答

0

你提的問題是非常不清楚,你有沒有我們所示的所有相關代碼。但是,您似乎是詢問如何在TreeView顯示您TableView對象。爲了在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}" ... />