Here約爲TreeView
我讀過的最好的文章之一。
Inside TreeView.Resources
如果刪除和打開命令是某些集合的項目,則可以聲明多個具有不同DataType
的數據模板。 (命令的TargetType將爲ICommand)。
但在我看來,你根本不需要TreeView。 客戶是列表的標題。如果你想讓它成爲epxpandable,使用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>
是刪除並打開只是操作? –
是的,這些對於所有樹項都是不變的,所以我想在XAML中構建它們。這就是爲什麼我要使用樹型視圖爲DataTemplate中(這是obviosly錯,但你讓我的想法) –
你真的需要使用TreeView控件或只是想的項目類似的安排? –