我对XAML和WPF来说是全新的,所以也许(希望)有一个简单的解决方案。
这基本上就是树的样子:
☑MyViewModel
| _ Property1
| _Property2
☑MyViewModel
| _ Property1
| _Property2
以下是代码:
<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。有没有办法做到这一点?
我尝试使用ContentPresenter for Property1,但我只能将它显示在树的顶层,以及复选框和名称旁边。这是我使用的ContentPresenter:
<ContentPresenter x:Uid="Property1Content" x:Name="Property1Content" Content="{Binding Property1} ContentTemplate={StaticResource Template1}"> </ContentPresenter>
如果我尝试将ContentPresenter放在StackPanel之外的任何地方,我收到了错误。
答案 0 :(得分:0)
您可以使用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;
}
}
在Treeview中放置xaml
<TreeView.ItemTemplateSelector>
<yourNamespace:TreeViewTemplateSelector Template1="{StaticResource template1}" Template2="{StaticResource template1}">
</c:TreeViewTemplateSelector>
</TreeView.ItemTemplateSelector>