У меня есть привязанный к данным 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 но я не знаю, как туда добраться. Кто-нибудь знает, как и это правильный путь?