2014-03-07 7 views
0

나는 Databases의 목록을 가진 Server을가집니다. Database의 목록은 Tables이고 Views입니다. 이라는 Database이라는 도우미 속성은 TablesViews 사이에 Union으로 구성되어 있습니다.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

귀하의 질문은 매우 명확하지 않다 당신은 우리에게 관련 모든 코드를 표시하지 있습니다. 그러나 으로 표시되어 TableView 개체를 TreeView에 표시하는 방법을 묻습니다. 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; } 

... XAML에서 그런

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

:

이 속성을 가질 수있다
<TreeView Name="tvServer" ItemsSource="{Binding Items}" ... /> 
관련 문제