Ваша проблема проистекает из того факта, что ваши родители и дети относятся к одному и тому же типу. один и тот же шаблон используется для обоих, здесь вам нужна иерархическая структура данных.
если бы у вас было родительское задание, в котором была коллекция детей, и дети были другого типа, чем родитель, то вы были бы крутыми. (потому что вы могли бы предоставить другой шаблон для детей, чем родитель)
другой способ сделать это - создать модель представления двух разных типов: один для обзоров задач и один для подзадач.
однако я нашел решение для взлома с использованием триггеров, основанных на размерах коллекции (когда count равен 0, я предполагаю, что это конечный узел), лучшим способом было бы иметь свойство объекта, указывающее, какой это тип, родительский или ребенок, то, что вы могли бы легко сделать с моделью представления, или вы могли бы поместить свойство в свои бизнес-объекты. перейдите сюда и загрузите образец решения TreeViewTest.zip.
Данный проект не является идеальным решением. Я создаю модель представления каждый раз. это дает вам гибкость и контроль над тем, что вы имеете в прямом wpf.
проект содержит этот код, который является хитрым (обратите внимание на формат строк на привязках, они действительно классные)
<HierarchicalDataTemplate
DataType="{x:Type local:Assignment}"
ItemsSource="{Binding Path=AssignmentCollection}">
<Grid>
<TextBlock
x:Name="parentTextBox">
<TextBlock.Text>
<MultiBinding
StringFormat="{}{0} - {1} - {2:F2}">
<Binding
Path="ClientName" />
<Binding
Path="Task" />
<Binding
Path="Hours" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock
x:Name="childTextBox" Visibility="Collapsed">
<TextBlock.Text>
<MultiBinding
StringFormat="{}{0:hh:mm tt} - {1:hh:mm tt} /{2}">
<Binding
Path="StartTime" />
<Binding
Path="EndTime" />
<Binding
Path="SubTask" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
<!--this is the trigger that chooses which text box to display-->
<HierarchicalDataTemplate.Triggers>
<DataTrigger
Binding="{Binding AssignmentCollection.Count}"
Value="0">
<Setter
TargetName="parentTextBox"
Property="Visibility"
Value="Collapsed" />
<Setter
TargetName="childTextBox"
Property="Visibility"
Value="Visible" />
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>