我有Server
,其中包含Databases
列表。
我有Database
,其中包含Tables
和Views
的列表。
我在Children
上有一个名为Database
的辅助属性,它由Union
和Tables
之间的Views
组成。
以下是我的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>
答案 0 :(得分:0)
您的问题非常不清楚,并且没有向我们展示了所有相关代码。但是,似乎询问如何在Table
中显示View
和TreeView
个对象。为了在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}" ... />