WPF Treeview Binding には少し複雑な状況があります。過去 2 日間 Google で試してみましたが、これは私が思いついた閉鎖ですが、問題は解決しません。
状況は次のとおりです。
次のようなオブジェクトがあります。
public class Category
{
public string Name { get; set; }
public List<Category> Categories { get; set; }
public List<Product> Products { get; set; }
}
public class Product
{
public string Name { get; set;
}
各カテゴリには、オブジェクトのリストと子カテゴリを含めることができます。私にはこれを行う理由があり、それは私にとって、そして私が書いているアプリにとって完全に理にかなっています。
実際のオブジェクトの構築は次のようになります。
Category - Pharmacy
|-Product - Aspirin
|-Product - Tylenol
|-Category - Tooth Paste
| |-Product - Crest
| |-Product - Colgate
|-Category - Paper Products
|-Category - Toilet Paper
| |-Product - NoName
| |-Product - Charmin
|-Category - Facial Tissue
|-Product - Kleenex
Category - Household
|-Product - Pinesol Cleaner
|-Product - Garbage Bags
今、私はこの関係をツリービューにデータバインドしようとしています。TreeView が上記のオブジェクト構造とほぼ同じに見えるようにしたいと思います。
これまでのところ、XAML Treeview は次のようになっています。
<TreeView x:Name="CategoryList" Margin="8" Grid.Row="2" Grid.RowSpan="2" ItemsSource="{Binding Path=Categories}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type src:Category}" ItemsSource="{Binding Products}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type src:Product}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
これは、カテゴリのメイン リストとそのサブ製品のそれぞれに最適です。ただし、各カテゴリの下にサブカテゴリが表示されるわけではありません。
各項目 (カテゴリまたは製品) が選択されるように、テンプレートを使用してこれを直接行う方法はありますか? 私はMVVMパターンを使用しており、コードビハインドを使用することに頼りたくありませんが、必要に応じて使用します。