根据items对象更改TreeViewItem模板

时间:2012-12-11 15:58:06

标签: wpf xaml treeview

我有一个TreeView绑定到一种类型的对象的可观察集合,但我想基于该对象中的值而不是主对象类型显示不同的DataTemplate,因为它们是相同的类型。更进一步,为了澄清,我实际上想要根据它所包含的对象类型。

Ok, so, rather than doing this:
<HierarchicalDataTemplate DataType="{x:Type listItem:TreeNodeViewModel}" ItemsSource="{Binding     Children}"

I actually want to do this:

<HierarchicalDataTemplate DataType.EmbeddedItem="{x:Type listItem:MyEmbededObjectType}"ItemsSource="{Binding Children}"

I have searched all day and now asking the question.

您好,感谢您的回答,但我仍然不确定该怎么做。此外,我刚刚发现了如何格式化问题,以便全部显示,并使我更容易知道我想要做什么。 我是Wpf的新手,但是很长一段时间的开发人员,因此我很快就掌握了一些东西,但有些奇怪的事情让我感到困惑。我有一个TreeView,如果ObservableCollection中的对象是不同的对象,则显示不同的模板,但在这种情况下,问题是在ObservableCollection中对象都是相同的类型,但这些对象中的每一个都有一个嵌入的对象不同的类型,这就是我想让XAML看作是检索模板的对象类型。 因此,我在ObservableCollection中提供的对象是TreeNodeViewModel。该类有一个名为Item的object类型的嵌入对象。它是我用来了解TreeNode与之相关的绑定项。此属性称为Item,我想用它来提升模板。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

将两个对象放在DataTemplate中,并使用IValueConverter设置可见性。

<DataTemplate>
  <StackPanel>
    <Button x:Name="Object1ShowThis" Visibility={StaticResource cMakeValueConverter/>
    <Button x:Name="Object2ShowThis" Visibility={StaticResource cMakeValueConverter2/>
   </StackPanel>
<DataTemplate>