我有一个数据绑定的TreeView,我想绑定SelectedItem。这个所附的行为在没有使用HierarchicalDataTemplate时完美地工作,但是使用它后,附加行为只能单向工作(从UI到数据),因为现在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>
如果我可以在附加的行为方法OnSelectedItemChanged
中获得对TreeView
的引用,或许我可以使用这个问题中的答案来获取TreeViewItem
,但我不知道如何到达那里。有谁知道该怎么做吗?这是正确的方式吗?