WPF在viewmodel中获取鼠标坐标

WPF在viewmodel中获取鼠标坐标

问题描述:

我有一个WPF项目(C#,MVVM Light,Visual Studio 2010)。WPF在viewmodel中获取鼠标坐标

我有一个关于问题分离的问题(MVVM),基本上是这样的:我在视图模型中有一个命令。我有一个我想调用该命令的上下文菜单。到现在为止还挺好。问题是该命令需要协调鼠标被点击。

为了更具体一点,ContextMenu仅在您点击特定Canvas控件时出现,并且它是所需的Canvas控件中的坐标。

这样做的简单方法是在XAML文档后面的代码中进行管理(我已经可以这样做了),但是如果我能做到的话,我宁愿将其放在ViewModel中所以。原因是在这个命令中有对我的数据模型的调用,所以我们最终会遇到分离问题。

我知道PassEventArgsToCommand,我意识到这是一个不好的做法,但是在这种情况下,我不确定我能否看到解决方法。所以,目前我没有尝试,它看起来像这样:

<ContextMenu x:Key="BackgroundMenu"> 
      <MenuItem Header="Add new node here"> 
       <i:Interaction.Triggers> 
        <i:EventTrigger EventName="Click"> 
         <cmd:EventToCommand Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.DataContext.AddNewNodeAtLocationCommand}" PassEventArgsToCommand="True"/> 
        </i:EventTrigger> 
       </i:Interaction.Triggers> 
      </MenuItem> 
     </ContextMenu> 

所以,现在我命令,视图模型中,看起来是这样的:

void AddNewNodeAtLocationExecute(RoutedEventArgs e) 
    { 

     return; 
    } 

内,我想这个方法得到这些鼠标坐标,但我不知道是否可能。 e.OriginalSource是'MenuItem',这没有多大帮助。

那么我该如何做到这一点?我可以这样做吗?或者我应该只有这一个由代码处理的命令?所述代码将涉及对数据库的调用,这就是为什么我对分离非常特别。

在此先感谢。

+0

是否需要实际的鼠标坐标或Canvas中元素的x和y坐标? – mm8

好吧,我偶然发现this question它谈论关于分离的问题,什么不是。

最后我合并了我的两个想法。首先,ContextMenu只是链接到后面的代码。在那一点上,我得到了我想要的坐标。然后,后面的代码获取视图的DataContext(我想要的命令是),并调用Execute方法(首先检查'can'方法)。

我想这是一样理想,你会得到。