gpt4 book ai didi

wpf - 在应用了 HierarchicalDataTemplate 的 WPF TreeView 中绑定(bind) SelectedItem

转载 作者:行者123 更新时间:2023-12-03 23:23:28 33 4
gpt4 key购买 nike

我有一个数据绑定(bind)TreeView我想绑定(bind)SelectedItem . This attached behavior没有 HierarchicalDataTemplate 也能完美运行但附加的行为只能以一种方式工作(UI 到数据)而不是另一种方式,因为现在 e.NewValueMyViewModel不是 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 ,也许我可以使用 this question 中的答案获取 TreeViewItem但我不知道怎么去那里。有谁知道如何以及这是正确的方法吗?

最佳答案

如果你像我一样发现 this answer有时会崩溃,因为 itemPresenter为空,那么对该解决方案的修改可能对您有用。

更改OnSelectedItemChanged对此(如果树尚未加载,则它会等到树被加载并再次尝试):

private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
Action<TreeViewItem> selectTreeViewItem = tvi2 =>
{
if (tvi2 != null)
{
tvi2.IsSelected = true;
tvi2.Focus();
}
};

var tvi = e.NewValue as TreeViewItem;

if (tvi == null)
{
var tree = ((BindableTreeViewSelectedItemBehavior) sender).AssociatedObject;
if (!tree.IsLoaded)
{
RoutedEventHandler handler = null;
handler = (sender2, e2) =>
{
tvi = GetTreeViewItem(tree, e.NewValue);
selectTreeViewItem(tvi);
tree.Loaded -= handler;
};
tree.Loaded += handler;

return;
}
tvi = GetTreeViewItem(tree, e.NewValue);
}

selectTreeViewItem(tvi);
}

关于wpf - 在应用了 HierarchicalDataTemplate 的 WPF TreeView 中绑定(bind) SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065995/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com