c# - 如何在没有代码的情况下将选定的 TreeView 项传递给 RelayCommand
问题描述
我有一个TreeView
装满我的自定义类型的项目ToolbarTreeItem
。现在,当用户单击一个项目时,我想知道在MainViewModel
.
我想在没有代码的情况下实现这一点,但使用RelayCommand
.
那么如何在RelayCommand
不使用导致代码落后的标准事件的情况下将所选项目传递给?
MainViewModel.cs 中的代码片段:
private ToolbarTreeItem _selectedItem;
private RelayCommand<ToolbarTreeItem> _changeSelectedItem;
public RelayCommand<ToolbarTreeItem> ChangeSelectedItem
{
get
{
return _changeSelectedItem ?? (_changeSelectedItem = new RelayCommand<ToolbarTreeItem>(selectedItem =>
{
_selectedItem = selectedItem;
}));
}
}
Toolbar.xaml 中的 Xaml 片段:
<TreeView SelectedItemChanged="???" />
解决方案
行为:
public class TreeViewSelection : Behavior<TreeView>
{
public static readonly DependencyProperty CurrentSelectionProperty = DependencyProperty.Register("CurrentSelection", typeof(object), typeof(TreeViewSelection), new PropertyMetadata(default(object)));
public object CurrentSelection
{
get
{
return (object)GetValue(CurrentSelectionProperty);
}
set
{
SetValue(CurrentSelectionProperty, value);
}
}
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.SelectedItemChanged += TreeView_SelectedItemChanged;
}
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
CurrentSelection = e.NewValue;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.SelectedItemChanged -= TreeView_SelectedItemChanged;
}
}
XAML:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:b="clr-namespace:NameSpaceWhereBahaviorDefined"
<TreeView ...>
<i:Interaction.Behaviors>
<b:TreeViewSelection CurrentSelection = "{Binding VMSelection}" />
</i:Interaction.Behaviors>
</TreeView>
推荐阅读
- python - Conv2d 中的单一权重定义和冻结
- python - 如何从嵌套的 pydantic 类中获取值?
- python - python - 如何在python纸浆中使用绝对差条件的总和?
- python - 如何将向量中具有间隔的某些值设置为另一个向量
- indexing - 您能解释一下 Google bot 的访问频率是如何确定的吗?
- unity3d - Navmesh 代理无法通过他路径的某些部分
- r - 如何在 R 中完全打印一个很长的字符串?
- css - 向上移动拆分器窗格时滚动条隐藏
- android - 如何通过 Worker 类从 REST API 获取数据
- javascript - 在 ReactJS 中迭代数组时不呈现 HTML 标签