如何将WPF中的命令绑定到控件的双击事件处理程序?

如何将WPF中的命令绑定到控件的双击事件处理程序?,wpf,data-binding,mvvm,command,double-click,Wpf,Data Binding,Mvvm,Command,Double Click,我需要将文本块的双击事件(或者可能是一个图像-无论哪种方式,它都是一个用户控件)绑定到我的ViewModel中的一个命令 TextBlock.InputBindings似乎没有正确绑定到我的命令,有帮助吗?试试Marlon Grech的。我也遇到了类似的问题,我需要将listview的MouseDoubleClick事件绑定到我的ViewModel中的命令 我提出的最简单的解决方案是放置一个具有所需命令绑定的伪按钮,并在MouseDoubleClick事件的eventhandler中调用按钮命令

我需要将文本块的双击事件(或者可能是一个图像-无论哪种方式,它都是一个用户控件)绑定到我的ViewModel中的一个命令


TextBlock.InputBindings似乎没有正确绑定到我的命令,有帮助吗?

试试Marlon Grech的。

我也遇到了类似的问题,我需要将listview的MouseDoubleClick事件绑定到我的ViewModel中的命令

我提出的最简单的解决方案是放置一个具有所需命令绑定的伪按钮,并在MouseDoubleClick事件的eventhandler中调用按钮命令的Execute方法

.xaml

这并不简单,但它非常简单,而且很有效。


<Button>
<Button.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="YourCommand" />
</Button.InputBindings>
</Button>

很简单,让我们使用MVVM方式: 我在这里使用的是MVVM Light,它很容易学习,而且很强大

1.将以下行放在xmlns声明中:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"  
xmlns:GalaSoft_MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command;
                                   assembly=GalaSoft.MvvmLight.Extras.WPF4"
2.按如下方式定义文本块:

<textBlock text="Text with event">
   <i:Interaction.Triggers>
      <i:EventTrigger EventName="MouseDoubleClick">
         <GalaSoft_MvvmLight_Command:EventToCommand 
                             Command="{Binding Edit_Command}"/>
      </i:EventTrigger>
   </i:Interaction.Triggers>
</textBlock>

我希望这对您有用,因为我已经在真实的ERP应用程序中使用了它

我的项目中已经有三个助手类。我只是希望WPF能够完全支持开发人员想用它来做的所有事情,但我想这会及时到来。谢谢,这很管用:)我同意你的一般看法——对MVVM的支持没有更多地融入WPF,这有点令人沮丧。大多数经验丰富的WPF开发人员都建立了自己的辅助工具库。如果您使用Silverlight,功能上的差距甚至更大!不要单独链接到外部站点-请包括答案。如果网站消失了,这就没用了。我个人认为这个答案应该是正确的。它不仅是迄今为止最简单的,而且还可以通过绑定到视图模型中的
ICommand
来与MVVM一起使用:
不工作(可能仅在某些对象上),直到您做出以下操作:很好地替代了杂乱的附加行为:)这真是太棒了!它甚至适用于其他开箱即用的控件。e、 然而,你似乎不能把它用在一种风格上。这些“gala软东西”有点乱,但是交互方式很好!
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"  
xmlns:GalaSoft_MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command;
                                   assembly=GalaSoft.MvvmLight.Extras.WPF4"
<textBlock text="Text with event">
   <i:Interaction.Triggers>
      <i:EventTrigger EventName="MouseDoubleClick">
         <GalaSoft_MvvmLight_Command:EventToCommand 
                             Command="{Binding Edit_Command}"/>
      </i:EventTrigger>
   </i:Interaction.Triggers>
</textBlock>
Public RelayCommand Edit_Command
{
   get;
   private set;
}

Public ViewModel1()
{
   Edit_Command=new RelayCommand(()=>execute_me());
}

public void execute_me()
{
   //write your code here
}