为什么不触发 DataGrid 内按钮的单击事件?

Álv*_*cía 1 wpf datagrid button mvvm mvvm-light

我正在使用 MVVM 模式和 MVVM Light 将事件转换为命令,在我的 XAML 中,我有以下代码:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Content="+" Padding="0,0,0,0" Height="Auto">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <i:InvokeCommandAction Command="{Binding MyCommand}" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

在我的视图模型中,我有以下代码:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Content="+" Padding="0,0,0,0" Height="Auto">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <i:InvokeCommandAction Command="{Binding MyCommand}" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

但是点击事件不会被触发。但是,我对应用程序中的每个按钮都使用这种方式,当按钮进入用户控件或窗口时,将触发该事件。

谢谢。

123*_*9 0 5

更改您的绑定,DataContext它试图寻找的是DataContextfor ,Template根据您的结构可能会有所不同。

改成这个

<i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.MyCommand}" /
Run Code Online (Sandbox Code Playgroud)