And*_*nea 8 wpf treeview key-bindings treeviewitem inputbinding
我有一个典型的树视图和视图模型.viewmodel有一个可观察的其他视图模型集合,用作树的数据源.
public class TreeViewVM {
public ObservableCollection<ItemVM> Items { get; private set; }
public ItemVM SelectedItem { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和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; }
}
Run Code Online (Sandbox Code Playgroud)
风景 :
<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>
Run Code Online (Sandbox Code Playgroud)
但是,无论我尝试什么,只要它在HierarchicalDataTemplate的"内部",我的命令就不会被调用.
如果我将TreeView.InputBindings中的KeyBinding(以及从ItemVM中的ICommand/RelayCommand移动到TreeViewVM)都很好,则会调用该命令.
但我想在ItemVM上使用命令(因为它是有意义的).有任何想法吗?
但我想在ItemVM上使用命令(因为它是有意义的).有任何想法吗?
如果TreeViewVM轨道通过所选择的项目SelectedItem属性,您可以定义InputBindings上TreeView,仍然对执行的命令ItemVM:
<TreeView ItemsSource="{Binding Items}">
<TreeView.InputBindings>
<KeyBinding Key="F2" Command="{Binding SelectedItem.Rename}"/>
</TreeView.InputBindings>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
请注意如何使用子属性语法SelectedItem.Rename将其ItemVM用作绑定的源.
不幸的是,绑定到a上的选定项目有点单调乏味TreeView.你不能直接绑定SelectedItem(正如你的XAML似乎暗示的那样),但是存在各种方法来克服这种限制.我喜欢的一个简单方法是使用Blend Interativity:
<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>
Run Code Online (Sandbox Code Playgroud)
您将必须实现一个SetSeletectedItemCommandon TreeViewVM设置属性SelectedItem.
| 归档时间: |
|
| 查看次数: |
5390 次 |
| 最近记录: |