Как получить доступ к alternationcount в WPF treeview?
У меня есть некоторые данные в моей view-модели, которая выглядит примерно так:
public class CostItem { public string Description { get; set; } public int Quantity { get; set; } public double UnitCost { get; set; } } public class Section { public string Name { get; set; } List<CostItem> CostItems { get; } }
Я показываю его с помощью следующего TreeView:
<TreeView x:Name="TreeViewBreakdown" ItemsSource="{Binding Sections}" AlternationCount="2"> <TreeView.Resources> <HierarchicalDataTemplate DataType="{x:Type me:Section}" ItemsSource="{Binding CostItems}"> <TextBlock Text="{Binding Name}"/> </HierarchicalDataTemplate> <DataTemplate DataType="{x:Type me:CostItem}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBox Grid.Row="0" Grid.Column="0" Text="{Binding Description}"/> <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Quantity}"/> <TextBox Grid.Row="0" Grid.Column="2" Text="{Binding UnitCost}"/> </Grid> </DataTemplate> </TreeView.Resources> </TreeView>
То, что я хотел бы сделать, это подать заявку и получить доступ к
AlternationIndex
к CostItem
дочерние узлы, отображаемые этим TreeView
, так что я могу чередовать цвет фона. Есть ли какой - нибудь способ сделать это?дополнительное Примечание:
Углубившись в это, я думаю, что есть одна центральная вещь, которую я не могу понять. Я объявил два шаблона в своем
TreeView
, один иерархический и один нормальный, и они выбираются по типу привязываемого объекта. Пока все хорошо.В случае с нормальным DataTemplate в моем XAML, насколько я понимаю, применяется именно этот шаблон для каждого дочернего элемента То, что я на самом деле хочу иметь возможность сказать
TreeView
это что-то вроде: "Когда вы привязываетесь к моему родительскому классу, я хочу, чтобы вы использовали, скажем, a ListView
или DataGrid
для всех детей этого родителя"Это трудно объяснить, но я был бы очень благодарен за разъяснение этого центрального пункта (если кто-нибудь понимает, о чем я болтаю)?Что я уже пробовал:
Кажется, что мне нужно вот это (взято из элемент DataGrid - как сделать GridView в дочерний элемент в TreeView в WPF-приложения - переполнение стека [^] ):
public class Customer { public string Name { get; set; } public IEnumerable<Order> Orders { get; set; } } public class Order { public DateTime PurchaseDate { get; set; } public IEnumerable<OrderItem> Items { get; set; } } public class OrderItem { public string ProductName { get; set; } public int Quantity { get; set; } public double UnitPrice { get; set; } public double TotalPrice { get; set; } }
&ЛТ;TreeView элемент х:имя="_treeView", что ItemsSource="{привязки}"&ГТ;
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type data:Customer}"
ItemsSource="{Binding Path=Orders}">
<TextBlock Text="{имя привязки}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type data:Order}">
<StackPanel>
<TextBlock Text="{Binding PurchaseDate}"/>
<ListView ItemsSource="{Binding Items}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding ProductName}" />
<GridViewColumn DisplayMemberBinding="{количество привязки}" />
<GridViewColumn DisplayMemberBinding="{Binding UnitPrice}" />
<GridViewColumn DisplayMemberBinding="{Binding TotalPrice}" />
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
За исключением того, что мне нужно сделать, это отрубить верхний уровень этого дерева (т. е.
Customer
уровень. У меня такое чувство, что я тупой, но я просто не могу понять синтаксис, чтобы сделать это. Поскольку у меня есть только два уровня, родитель и ребенок, нужен ли мне вообще HierarchicalDataTemplate
- Вот тут-то я и ошибаюсь ?