[英]TreeView using HierarchicalDataTemplate
我已經將自己包裹在車軸上好幾天了。
我正在嘗試做的是創建一個具有TreeView
的UserControl
。 TreeView
應該顯示有關Show
信息,並且Show
具有Instructions
列表,依此類推,等等。
我嘗試了各種方式來執行此操作,但是無法顯示數據。 這是我嘗試過的一些代碼片段:
<TreeView ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}, Path=DataContext.Show}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Instructions}">
<TextBlock Text="{Binding Path=ShowName}"/>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Sounds}">
<TextBlock Text="{Binding Path=Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Nodes}">
<TextBlock Text="{Binding Path=Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
我也嘗試過...
<DockPanel>
<DockPanel.Resources>
<HierarchicalDataTemplate DataType="{x:Type show:Show}" ItemsSource="{Binding Path=Instructions}">
<TextBlock Text="{Binding Path=ShowName}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type show:Instruction}" ItemsSource="{Binding Path=Sounds}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type show:SoundInstruction}" ItemsSource="{Binding Path=Nodes}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type show:NodeInstruction}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</DockPanel.Resources>
<TreeView ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}, Path=DataContext.Show}">
</TreeView>
</DockPanel>
但是似乎沒有任何作用。 在我的MainWindow
,我有以下代碼可以初始化數據上下文:
Show s = new Show("Hamlet");
s.AddInstruction(new Instruction("Inst1"));
s.AddInstruction(new Instruction("Inst2"));
ShowViewModel vm = new ShowViewModel(s);
DataContext = vm;
在這方面的任何幫助將不勝感激。
可靠的人
您的ItemsSource必須綁定到IEnumerable
。 從您的代碼來看,您的ShowViewModel.Show
看起來是一個Show
類型的屬性,是單個對象。 那將行不通,您必須將其轉換為一個集合(最好是ObservableCollection
)。
用來定義模板的第二種方法(並排,而不是嵌套的)肯定更好。
另外,假設您沒有在Window
和DockPanel
之間將DataContext
設置為其他任何值,則可以更改此設置:
<TreeView ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}, Path=DataContext.Show}">
對此:
<TreeView ItemsSource="{Binding Show}">
您的數據上下文將自動沿可視樹繼承。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.