.net 我如何通过树景';s选择EdItem以执行另一个命令?
我在WPF MVVM中创建了一个具有分层DAtaTemplate属性的树视图 在树视图之外,我有一个“编辑”按钮。按下编辑按钮时,我想将Treeview的selectedItem传递给viewmodel中的RelayCommand 双击节点后,我在TreeviewItem中实现了相同的功能。然而,我想知道什么是最好的方式来实现这一点以外 我的代码结构如下 主视图->主视图模型 StateViewItem->StateViewModel(继承自TreeViewItemViewModel的HierarchycalDataTemplate) RegionViewItem->RegionViewModel(从TreeViewItemViewModel继承的数据模板) RegionViewModel处理节点的双击并完成编辑功能 但是“编辑”按钮在树状视图之外,如何将选定的RegionViewItem传递给命令绑定,以便加载它进行编辑.net 我如何通过树景';s选择EdItem以执行另一个命令?,.net,wpf,mvvm,wpf-controls,binding,.net,Wpf,Mvvm,Wpf Controls,Binding,我在WPF MVVM中创建了一个具有分层DAtaTemplate属性的树视图 在树视图之外,我有一个“编辑”按钮。按下编辑按钮时,我想将Treeview的selectedItem传递给viewmodel中的RelayCommand 双击节点后,我在TreeviewItem中实现了相同的功能。然而,我想知道什么是最好的方式来实现这一点以外 我的代码结构如下 主视图->主视图模型 StateViewItem->StateViewModel(继承自TreeViewItemViewModel的Hiera
提前感谢您的帮助区域视图模型是否可以访问状态视图模型?或者更重要的是,转到
状态视图模型。选择editem
?(一些代码可能会有帮助)
如果没有,您可能必须实现一个事件系统,在该系统中,只要
StateViewModel.SelectedItem
更改,它就会广播StateChanged
事件,并且RegionViewModel
订阅该事件并跟踪SelectedState
下面的代码仅用于MVVM的指导目的。它可能会/可能不会编译
方式1:
假设您的TreeViewItemModel
是树中所有树视图项的基本项级视图模型数据上下文,请在TreeViewItemModel
中添加名为IsSelected
的可写属性。别忘了在IsSelected
的Setter中通知属性更改
在XAML树视图中,在针对treevieItem
的样式中添加以下内容
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
在静态HandleMouseDownPropertyChanged()dependency property changed方法中,处理(TreeViewItem)发送方上的MouseDown事件
((TreeViewItem)sender).MouseDown += TreeViewMouseDownEventHandler;
private static TreeViewMouseDownEventHandler(object sender, MouseButtonEventArgs e)
{
var treeViewItem = (TreeViewItem)sender;
if (treeViewItem.IsSelected)
{
var mySelectedItem = treeViewItem.DataContext as TreeViewItemViewModel;
}
}
将此选定的“TreeViewItemModel”实例作为所需的选定项传递给例程
如果有帮助,请告诉我。谢谢您的回答!!RegionViewModel有一个父属性,可以在其中访问StateViewModel。StateViewModel有一个Children属性,它是RegionViewModel的集合。我不允许发布项目代码,但如果你需要,我会创建一个复制并发布它,我想我看错了你的问题。。。您是否有两种编辑方法,一种在RegionViewModel中可以双击,另一种在MainViewModel(?)中可以单击按钮?我在RegionViewModel中有一种编辑方法,它将消息传递给另一个视图模型以加载区域进行编辑。在MainViewModel中,我想访问在Treeview中选择的RegionViewModel对象,以便传递消息以加载区域进行编辑您的MainViewModel
是否可以访问StateViewModel
或MainView
访问Treeview
?如果您可以在问题中用伪代码绘制XAML布局或ViewModel层次结构,这将是最简单的。您好,我使用MVVM Light中的消息传递实现了这一点。谢谢,我现在正在尝试方法1。会让你知道它是否有效
((TreeViewItem)sender).MouseDown += TreeViewMouseDownEventHandler;
private static TreeViewMouseDownEventHandler(object sender, MouseButtonEventArgs e)
{
var treeViewItem = (TreeViewItem)sender;
if (treeViewItem.IsSelected)
{
var mySelectedItem = treeViewItem.DataContext as TreeViewItemViewModel;
}
}