У меня есть привязанный к данным TreeView
, и я хочу привязать SelectedItem
. Это прикрепленное поведение отлично работает без HierarchicalDataTemplate
, но с ним связанное поведение работает только в одном направлении (пользовательский интерфейс к данным), а не другой, потому что теперь e.NewValue
есть MyViewModel
не TreeViewItem
.
Это фрагмент кода из прикрепленного поведения:
private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var item = e.NewValue as TreeViewItem;
if (item != null)
{
item.SetValue(TreeViewItem.IsSelectedProperty, true);
}
}
Это мое определение TreeView
:
<Window xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
<TreeView ItemsSource="{Binding MyItems}" VirtualizingStackPanel.IsVirtualizing="True">
<interactivity:Interaction.Behaviors>
<behaviors:TreeViewSelectedItemBindingBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
</interactivity:Interaction.Behaviors>
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:MyViewModel}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Window>
Если я могу получить ссылку на TreeView
в приложенном методе поведения OnSelectedItemChanged
, возможно, я смогу использовать ответы в этом вопросе, чтобы получить TreeViewItem
но я не знаю, как туда добраться. Кто-нибудь знает, как и это правильный путь?