Я могу привести пример.
Что я делаю, так это устанавливаю свойство IsSelected
для TreeViewItem
(не самого TreeView
) в модели представления, потому что вы можете привязаться к нему.
В моей модели представления у меня есть свойство ElementInViewModel
, которое представляет собой структуру данных, которая формирует само дерево.
Я использую HierarchicalDataTemplate
в своем Xaml для отображения.
Сам объект данных имеет тип YourDomainType
, а его дочерние элементы (того же типа) находятся в своем свойстве ChildElements
.
В модели представления я установил свойства IsExpanded
и IsSelected
моего класса данных YourDomainType
. Из-за стиля, определенного ниже, они передадут этот параметр в TreeViewItem
.
Это работает для вас?
<UserControl>
<UserControl.Resources>
<CollectionViewSource Source="{Binding Path=ElementInViewModel}" x:Key="Cvs">
</CollectionViewSource>
<HierarchicalDataTemplate DataType="{x:Type DomainModel:YourDomainType}"
ItemsSource="{Binding Path=ChildElements}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</Setter>
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</Setter>
</Style>
</UserControl.Resources>
<DockPanel>
<TreeView ItemsSource="{Binding Source={StaticResource Cvs}}"/>
</DockPanel>
</UserControl>