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

时间:2009-08-18 12:30:45

标签: wpf data-binding mvvm command double-click

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

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

4 个答案:

答案 0 :(得分:237)

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

http://thejoyofcode.com/Invoking_a_Command_on_a_Double_Click_or_other_Mouse_Gesture.aspx

答案 1 :(得分:10)

尝试Marlon Grech的attached command behaviors

答案 2 :(得分:6)

这很简单,让我们使用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>

3.然后在viewmodel中编写命令代码!!!

ViewModel1.cs

Public RelayCommand Edit_Command
{
   get;
   private set;
}

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

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

我希望这对我有用,因为我在Real ERP应用程序中使用它

答案 3 :(得分:1)

我也有一个类似的问题,我需要将listview的MouseDoubleClick事件绑定到我的ViewModel中的命令。

我提出的最简单的解决方案是放置一个虚拟按钮,该按钮具有所需的命令绑定,并在MouseDoubleClick事件的事件处理程序中调用按钮命令的Execute方法。

的.xaml

 <Button Visibility="Collapsed" Name="doubleClickButton" Command="{Binding Path=CommandShowCompanyCards}"></Button>
                <ListView  MouseDoubleClick="ListView_MouseDoubleClick" SelectedItem="{Binding Path=SelectedCompany, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Margin="0,10,0,0" ItemsSource="{Binding Path=CompanyList, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" HorizontalContentAlignment="Stretch" >

代码隐藏

     private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                doubleClickButton.Command.Execute(null);
            }

这不是直截了当的,但它非常简单且有效。