我有一个业务对象项目,其中包含复合结构:
public class Tree
{ public IProductComponent TreeRoot { get; set; } }
public interface ITreeComponent
{ public string Name { get; set; } }
public class ContainerComponent : ITreeComponent
{ public BindingList<ITreeComponent> Children { get; set; } }
public class LeafComponent : ITreeComponent
{ }
我需要将此结构绑定到WPF项目中的TreeView。首先是树视图:
<TreeView x:Name="treeView" Grid.ColumnSpan="2">
<TreeView.Resources>
<HierarchicalDataTemplate
ItemsSource="{Binding Children}"
DataType="{x:Type businessObjects:ContainerComponent}">
<Label Content="{Binding Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type businessObjects:LeafComponent}">
<Label Content="{Binding Name}"/>
</DataTemplate>
</TreeView.Resources>
</TreeView>
绑定代码:
bTreeView = new Binding();
bTreeView.Source = MyTree;
bTreeView.Path = new PropertyPath("TreeRoot.Children");
treeView.SetBinding(TreeView.ItemsSourceProperty, bTreeView);
问题是TReeView实际上并没有使用这些模板(它只显示最高级别的层次结构并调用.ToString()来显示这些项目。请告诉我哪里出错了。否则,如果我设置了它工作正常,但我无法在那里定义两个模板。
感谢。
答案 0 :(得分:0)
我注意到你将模板放在资源中,而不是在TreeVeiw.ItemTemplate下。
TreeView应该有一个ItemTemplate(Hierarchical)和ItemsSource集。不应该需要更多的东西。
有助于我们测试的示例数据。
答案 1 :(得分:0)
我的不好 - 主程序集正在用实体加载dll两次而不是一次。这导致它变得疯狂 - 一旦我修复它并且一旦问题消失就加载组件。