這很難。它似乎需要一個HierarchicalDataTemplate
,但因爲你想要的行爲需要多個ItemsControls,它不會按預期工作。我認爲沒有辦法在XAML中創建TreeView
模板來執行此操作。您最好的選擇是創建某種自定義項目控件。您可能需要執行代碼中的項目綁定,而不是XAML中的項目綁定,因爲如果沒有XAML,則XAML無法理解嵌套關係。
<Window.Resources>
<DataTemplate x:Key="ItemTemplate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</Window.Resources>
<StackPanel Orientation="Horizontal">
<ListBox Name="Level1" Width="150" Height="150"
ItemsSource="{Binding Collection}"
ItemTemplate="{StaticResource ItemTemplate}"/>
<ListBox Name="Level2" Width="150" Height="150"
ItemsSource="{Binding ElementName=Level1, Path=SelectedValue.Children}"
ItemTemplate="{StaticResource ItemTemplate}"/>
<ListBox Name="Level3" Width="150" Height="150"
ItemsSource="{Binding ElementName=Level2, Path=SelectedValue.Children}"
ItemTemplate="{StaticResource ItemTemplate}"/>
</StackPanel>
哪裏Collection
是你的根:
話雖這麼說,如果你保證只有2級嵌套(如你的例子),你可以用下面的加價做到這一點很容易物品集合,並且每個物品上都有一個名爲Children
的物品,其中包含子集合。
但我認爲你所要求的是一個項目控件,可以支持任意數量的嵌套級別,而不僅僅是2.所以在這種情況下,我會在代碼隱藏方面做到這一點。綁定將是相同的 - 也就是說,在每個級別上,ListBox
應該綁定到父級別的項目。但是您顯然需要迭代併爲每個嵌套級別創建一個ListBox
。
嗨Ray, 感謝您花時間分享您的解決方案。它看起來比我的自定義控件好多了!然而,我找不到一種方法使其工作......我認爲在附加屬性的代碼中存在拼寫錯誤,但仍然無效。你可以分享一個可下載的檔案嗎? – japf