WPF数据网格双击通过命令+ INotifyPropertyChanged

本文关键字:命令 INotifyPropertyChanged 双击 数据 数据网 网格 WPF | 更新日期: 2023-09-27 18:16:17

我想在我的ViewModel中执行一个命令,当DataGrid项被单击时。作为参数,我希望有相应的行

我在互联网上找到了一种方法,但它使用DependencyProperty

http://social.msdn.microsoft.com/forums/en - us/wpf/thread/632ea875 a5b8 - 4 - d47 - 85 - b3 - b30f28e0b827

我不使用DependencyProperty在我的项目,而不是我使用INotifyPropertyChanged。如何在不使用DependencyProperty的情况下实现"在数据网格中双击"命令?

WPF数据网格双击通过命令+ INotifyPropertyChanged

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
...
<DataGrid SelectedItem={Binding MySelectedItem, Mode=TwoWay}>
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseDoubleClick">
        <i:InvokeCommandAction Command="{Binding YourCommand}" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</DataGrid>

我通常使用AttachedCommandBehavior。它是3个类文件,可以添加到您的项目中,并允许您将命令附加到几乎任何事件。

下面是一个如何使用它的例子:

<Style TargetType="{x:Type DataGridRow}">
    <Setter Property="local:CommandBehavior.Event" Value="MouseDoubleClick" />
    <Setter Property="local:CommandBehavior.Action" Value="{Binding MyDoubleClickCommand}" />
    <Setter Property="local:CommandBehavior.CommandParameter" Value="{Binding }" />
</Style>

MVVM Light Toolkit提供了EventToCommand行为,这应该能够实现所需的行为(如果您不想使用框架,您可以随时使用自己的行为)

您可以使用这个隐藏代码片段来标识被双击的行。

在注释"//对底层数据做一些事情"的行中,您可以从网格或行的DataContext中获得附加的ViewModel,并以行为参数调用您的命令。