WPF TreeView不会相应地应用DataTemplate

时间:2010-03-02 06:23:42

标签: c# wpf templates treeview

我有一个业务对象项目,其中包含复合结构:

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()来显示这些项目。请告诉我哪里出错了。否则,如果我设置了它工作正常,但我无法在那里定义两个模板。

感谢。

2 个答案:

答案 0 :(得分:0)

我注意到你将模板放在资源中,而不是在TreeVeiw.ItemTemplate下。

TreeView应该有一个ItemTemplate(Hierarchical)和ItemsSource集。不应该需要更多的东西。

有助于我们测试的示例数据。

答案 1 :(得分:0)

我的不好 - 主程序集正在用实体加载dll两次而不是一次。这导致它变得疯狂 - 一旦我修复它并且一旦问题消失就加载组件。