Что не так со следующей настройкой TreeView?Установка свойства selected
виртуальной машины родительского узла переключает свойство selected
дочернего узла.
<TreeView ItemsSource="{Binding Documents}">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
<Setter Property="IsSelected" Value="{Binding selected}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding descriptions}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding selected}" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding name}" />
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Объекты виртуальной машины выглядят так:
public class DocumentVM : ObservableObject
{
private string _name;
public string name
{
get { return _name; }
set { Set(ref _name, value); }
}
private bool _selected = false;
public bool selected
{
get { return _selected; }
set { Set(ref _selected, value); }
}
}
DescriptionVM
очень похоже.
Так, например, если я запускаю следующие две строки:
MyVM.Documents[1].descriptions[0].selected = true;
MyVM.Documents[1].selected = true;
Первая строка устанавливает выбранный первый дочерний элемент второго документа, тогда как вторая строка устанавливает первый узел документа для выбора, но устанавливает для первого потомка второго документа невыбранный .Я уверен, что это что-то не так с шаблонами данных, которые я там использую, но не могу понять, что это такое.