我在WPF Treeview绑定方面遇到了一些复杂的情况。我已经花了最近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模式,不想诉诸于使用代码后台,但如果必要的话,我会这样做。