如何创建像这样的treeview:
<TreeViewItem Header="Customers" ItemsSource="{Binding Customers}">
- Peter
- Delete
- Open
- Andrew
- Delete
- Open
我想创建子项目模板,如下所示
<TreeViewItem Header="{Binding Header}">
<TreeViewItem Header="Delete"/>
<TreeViewItem Header="Open"/>
</TreeViewItem>但是它不太好用,因为我最终使用的是带有数据板treeviewitem的treeviewitem,但是我想重写子元素的控制模板,而不是父元素。当然,我希望避免我的绑定成为TreeViewItem,也不想创建带有静态服从"Open“、"Delete”的子级。
发布于 2013-04-02 09:47:08
这里是我读过的关于TreeView的最好的文章之一。
在TreeView.Resources中,如果删除和打开命令是某些集合的项,则可以使用不同的DataType声明几个DataType。(命令的TargetType为ICommand)。
但我觉得你根本不需要TreeView。客户是列表的标题。如果您希望它是可执行的,请使用膨胀机控件。
然后,为每个客户提供一个数据模板就足够了。
<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>https://stackoverflow.com/questions/15704761
复制相似问题