Для этого вам понадобится конвертер значений, чтобы взять объект Order
и преобразовать его в массив типа, который имеет свойства Name
и Items
: -
public class ItemWrapper
{
public string Name {get; set; }
public IEnumerable Items {get; set;}
}
public class OrderConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Order order = value as Order;
if (order != null)
{
List<object> result = new List<object>();
result.Add(new ItemWrapper() {Name = "Order Items", Items = order.OrderItems} );
result.Add(new ItemWrapper() {Name = "Commission Items", Items = order.CommissionItems} );
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Теперьвы добавляете этот конвертер к своим ресурсам и ссылаетесь на него в своем шаблоне: -
<Grid.Resources>
<local:OrderConverter x:Key="OrderConverter" />
<sdk:HierarchicalDataTemplate
x:Key="OrdersTreeLevel0"
ItemsSource="{Binding Converter=OrderConverter}"
ItemTemplate={StaticResource OrdersTreeLevel1}">
<TextBlock
FontWeight="{Binding IsUnread}"
Text="{Binding Id, StringFormat='Order #{0}'}" />
</sdk:HierarchicalDataTemplate>
</Grid.Resources>
Конечно, это очень просто, очень сложно, если вам нужен другой шаблон для Commission
и OrderItem
,Если они оба имеют простые общие свойства, такие как Имя, тогда достаточно одного шаблона для уровня 2.В противном случае все усложняется.