代码以下仅用于MVVM的引导目的。它可能会/可能不会编译。
方法1:
假设你TreeViewItemViewModel
是树中的所有树视图项的基本项目的水平视图模型数据上下文,加入TreeViewItemViewModel
可写属性调用IsSelected
。不要忘记通知IsSelected
的安装人员。
在您的XAML树视图中添加的Style
以下针对性的TreeViewItem
....
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
当任何TreeView中被选中这样一来,只有自己的TreeViewItemViewModel
的IsSelected
属性将是真实的,并休息所有树视图项目将是错误的。因此,剩下的任务是从与TreeView
的ItemsSource
绑定的对象的层次结构中找到所选的TreeViewItemViewModel
对象。
方式2:
有一个TreeViewItem附加属性和处理其MouseDown事件。检查TreeViewItem的“IsSelected”值是否为真,并提取其数据上下文,该数据上下文将是选定的TreeViewItemViewModel
。
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="local:MyAttachedBehavior.HandleMouseDown" Value="true" />
</Style>
</TreeView.Resources>
静态HandleMouseDownPropertyChanged()依赖属性改变的方法
,关于办理(TreeViewItem)sender
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;
}
}
通过这个选择`TreeViewItemViewModel”实例为需要选择的项目到你的日常。
让我知道这是否有帮助。
感谢您的回答! RegionViewModel有一个父属性,可以访问StateViewModel。 StateViewModel有一个Children属性,它是RegionViewModel的集合。我不允许发布项目代码,但如果你需要我会创建一个repro并发布它 – ganeshran
我认为我错读了你的问题......你有两种编辑方法,一种是在RegionViewModel中,它可以在双击上工作,一个在MainViewModel(?)中应该在Button Click上工作? – Rachel
我在RegionViewModel中有一个编辑方法,它将消息传递到另一个视图模型以加载要编辑的区域。 在MainViewModel中,我想要访问在Treeview中选择的RegionViewModel对象,这样我就可以传递消息来加载区域进行编辑 – ganeshran