繁体   English   中英

WPF TreeView如何为TreeViewItem的子元素添加TreeViewItem控件模板

[英]WPF TreeView how to add TreeViewItem control template for child elements of TreeViewItem

我如何创建像这样的treeview:

 <TreeViewItem Header="Customers" ItemsSource="{Binding Customers}">
  • 顾客
    • 安娜
      • 删除
      • 打开
    • 彼得
      • 删除
      • 打开
    • 安德鲁
      • 删除
      • 打开

我想创建像这样的子项目模板

 <TreeViewItem Header="{Binding Header}">
   <TreeViewItem Header="Delete"/>
   <TreeViewItem Header="Open"/>
 </TreeViewItem>

但这并不能很好地工作,因为我最终将treeviewitem与datatemplate treeviewitem一起使用,但是我想覆盖子元素而不是父元素的controltemplate。 当然,我想避免绑定为TreeViewItem,也不想使用静态对象“ Open”,“ Delete”创建子代。

是我读过的有关TreeView的最佳文章之一。

TreeView.Resources内部,如果Delete和Open命令是某个集合的项目,则可以声明多个具有不同DataType DataTemplates。 (命令的TargetType为ICommand)。

但是看来我根本不需要TreeView。 客户是列表的标题。 如果您希望它可扩展,请使用Expander控件。
这样,为每个客户提供一个数据模板就足够了。

<DataTemplate DataType="CustomerTypeName">
    <Expander Header="{Binding CustomerName}">
        <Button Command="{Binding DeleteCustomerCmd}" Content="Delete" Margin="15,0,0,0"/>
        <Button Command="{Binding OpenCustomerCmd}" Content="Open" Margin="15,0,0,0"/>
    <Expander/>
<DataTemplate>

但是在这里您会遇到一些选择突出显示的麻烦。

public class CommandWrapper
{
    ICommand Command {get;set;}
    string CommandName {get;set;}
}

public class CustomerViewModel
{
    Customer Customer {get;set;}
    IEnumerable<CommandWrapper> Commands {get;}
}

让客户成为集CustomerViewModel 然后,以下XAML可以帮助您:

<TreeView ItemsSource="{Binding ...}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="TypeHoldingCustomersCollection" 
            ItemsSource="{Binding Customers}">
            <TextBlock Text="Customers"/>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="CustomerViewModel" 
            ItemsSource="{Binding Commands}">
            <TextBlock Text="{Binding Path=Customer.Name}"/>
        </HierarchicalDataTemplate>

        <DataTemplate DataType="CommandWrapper">
            <Button Content="{Binding CommandName}" Command="{Binding Command}"/>
        </DataTemplate>
    </TreeView.Resources>
</TreeView>

您将为此使用HierarchicalDataTemplate。

在这里查看分步教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM