我如何创建像这样的treeview:

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

  • 我想创建像这样的子项目模板
     <TreeViewItem Header="{Binding Header}">
       <TreeViewItem Header="Delete"/>
       <TreeViewItem Header="Open"/>
     </TreeViewItem>
    

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

    最佳答案

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

    如果Delete和Open命令是某个集合的项目,则可以在TreeView.Resources内部声明多个具有不同DataType的数据模板。 (命令的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>
    

    关于c# - WPF TreeView如何为TreeViewItem的子元素添加TreeViewItem控件模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15704761/

    10-13 06:25