gpt4 book ai didi

wpf - TreeViewItem 上的键绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 05:59:20 27 4
gpt4 key购买 nike

我有一个典型的 TreeView 和一个 View 模型。 View 模型有一个可观察的其他 View 模型集合,用作树的数据源。

public class TreeViewVM {
public ObservableCollection<ItemVM> Items { get; private set; }
public ItemVM SelectedItem { get; set; }
}

和 ItemVM :
public class ItemVM {
public string Name { get; set; }
public ImageSource Image { get; private set; }
public ObservableCollection<ItemVM> Children { get; private set; }
public ICommand Rename { get; private set; }
}

风景 :
<TreeView Selecteditem="{Binding SelectedItem}" ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel.InputBindings>
<KeyBinding Key="F2" Command="{Binding Rename}"/>
</StackPanel.InputBindings>
<Image Source="{Binding Image}"/>
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

但是,无论我尝试什么,只要它在 HierarchicalDataTemplate“内部”,就不会调用我的命令。

如果我将 TreeView.InputBindings 中的 KeyBinding(以及 ICommand/RelayCommand 从 ItemVM 移动到 TreeViewVM)一切都很好,则调用该命令。

但我想在 ItemVM 上使用命令(因为它是有意义的)。有任何想法吗?

最佳答案

But I would like to have the command on the ItemVM (as it is where it makes sense). Any ideas?



如果 TreeViewVM通过 SelectedItem 跟踪所选项目您可以定义的属性 InputBindingsTreeView并且仍然在 ItemVM 上执行命令:
<TreeView ItemsSource="{Binding Items}">
<TreeView.InputBindings>
<KeyBinding Key="F2" Command="{Binding SelectedItem.Rename}"/>
</TreeView.InputBindings>
</TreeView>

注意子属性语法 SelectedItem.Rename用于使用 ItemVM作为绑定(bind)的来源。

不幸的是,绑定(bind)到 TreeView 上的选定项有点繁琐。 .您不能直接绑定(bind)到 SelectedItem (正如您的 XAML 似乎暗示的那样)但存在 various methods to overcome this limitation .

一种简单的方法是使用 Blend Interactivity :
<TreeView Name="treeView" ItemsSource="{Binding Items}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<i:InvokeCommandAction Command="{Binding SetSelectedItemCommand}" CommandParameter="{Binding SelectedItem, ElementName=treeView}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TreeView>

您必须实现 SetSeletectedItemCommandTreeViewVM设置属性 SelectedItem .

关于wpf - TreeViewItem 上的键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3142509/

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