Wpf HierarchicalDataTemplate中有多个Itemplates?
我对XAML和WPF是完全陌生的,所以可能(希望)有一个简单的解决方案 这就是树的基本外观: ☑ MyViewModelWpf HierarchicalDataTemplate中有多个Itemplates?,wpf,xaml,treeview,Wpf,Xaml,Treeview,我对XAML和WPF是完全陌生的,所以可能(希望)有一个简单的解决方案 这就是树的基本外观: ☑ MyViewModel |\u物业1 |\u物业2 ☑ MyViewModel |\u物业1 |\u物业2 下面是代码: <HierarchicalDataTemplate x:Uid="HierarchialDataTemplate2" DataType="{x:Type vm:MyViewModel}" ItemTemplate="{StaticResource Template1}"&g
|\u物业1
|\u物业2 ☑ MyViewModel
|\u物业1
|\u物业2 下面是代码:
<HierarchicalDataTemplate x:Uid="HierarchialDataTemplate2" DataType="{x:Type vm:MyViewModel}" ItemTemplate="{StaticResource Template1}">
<HierarchialDataTemplate.ItemContainerStyle>
<!-- style information -->
</HierarchialDataTemplate.ItemContainerStyle>
<HierarchialDataTemplate.ItemSource>
<MultiBinding x:Uid="MultiBinding1" Converter="{StaticResource CollectionConcatinator}">
<Binding x:Uid="Binding1" Path="Property1"/>
<Binding x:Uid="Binding2" Path="Property2"/>
</MultiBinding>
</HierarchialDataTemplate.ItemSource>
<StackPanel x:Uid="frame" x:Name="frame" Orientation="Horizontal">
<!-- basic checkbox and name for top level of the tree node-->
</StackPanel>
</HierarchialDataTemplate>
我只想将Template1应用于Property1,而不将任何模板应用于Property2。有办法吗
我尝试为Property1使用ContentPresenter,但我只能让它显示在树的顶层,以及复选框和名称旁边。这是我使用的ContentPresenter:
<ContentPresenter x:Uid="Property1Content" x:Name="Property1Content" Content="{Binding Property1} ContentTemplate={StaticResource Template1}"> </ContentPresenter>
如果我尝试将ContentPresenter放在StackPanel之外的任何位置,我会出错。您可以使用Treeview的ItemTemplateSelector
public class TreeViewTemplateSelector : DataTemplateSelector
{
private DataTemplate _Template1;
public DataTemplate Template1
{
get { return _Template1; }
set { _Template1 = value; }
}
private DataTemplate _Template2;
public DataTemplate Template2
{
get { return _Template2; }
set { _Template2 = value; }
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
return item.GetType() == typeof(property1) ? Template1 : Template2;
}
}
放在树视图中的xaml下面
<TreeView.ItemTemplateSelector>
<yourNamespace:TreeViewTemplateSelector Template1="{StaticResource template1}" Template2="{StaticResource template1}">
</c:TreeViewTemplateSelector>
</TreeView.ItemTemplateSelector>