独立于 Row 操作为 Datagrid 单元格调用操作
Invoke an action for a Datagrid cell independent from Row action
我有一个 datagrid
,其中所有行的第一列都是常量。
我想要以下行为:
- 当用户双击该行的任何单元格(不包括第一个单元格)时,调用
action A
知道选择了哪一行。这是基于事件的(触发事件)。
- 当用户双击任何行的第一个单元格时,调用
action B
知道选择了哪一行。
为此,我编写了以下代码:
<DataGrid x:Name="dataGrid" ItemsSource="{Binding source}" MouseDoubleClick="doubleClick">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="♣" Foreground="{Binding Path=color}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding FirstCellCommand}" CommandParameter="{Binding SelectedItem, ElementName=dataGrid}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Label" Binding="{Binding label, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>
点 (1.) 工作正常,但 (2.) 没有触发动作。
我漏掉了什么吗?
以防万一有人有类似的问题:我还没有找到我想要的东西!但是可以使用 code-behind 来解决。
它对我有用如下:
<DataGrid x:Name="dataGrid" ItemsSource="{Binding source}" MouseDoubleClick="doubleClick">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="♣" Foreground="{Binding Path=color}" MouseDown="this_MouseDown"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Label" Binding="{Binding label, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>
我删除了 Interaction.Triggers
并将 MouseDown
添加到 TextBlock
。
如果有人使用绑定提供答案,我将不胜感激。
我有一个 datagrid
,其中所有行的第一列都是常量。
我想要以下行为:
- 当用户双击该行的任何单元格(不包括第一个单元格)时,调用
action A
知道选择了哪一行。这是基于事件的(触发事件)。 - 当用户双击任何行的第一个单元格时,调用
action B
知道选择了哪一行。
为此,我编写了以下代码:
<DataGrid x:Name="dataGrid" ItemsSource="{Binding source}" MouseDoubleClick="doubleClick">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="♣" Foreground="{Binding Path=color}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding FirstCellCommand}" CommandParameter="{Binding SelectedItem, ElementName=dataGrid}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Label" Binding="{Binding label, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>
点 (1.) 工作正常,但 (2.) 没有触发动作。
我漏掉了什么吗?
以防万一有人有类似的问题:我还没有找到我想要的东西!但是可以使用 code-behind 来解决。 它对我有用如下:
<DataGrid x:Name="dataGrid" ItemsSource="{Binding source}" MouseDoubleClick="doubleClick">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="♣" Foreground="{Binding Path=color}" MouseDown="this_MouseDown"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Label" Binding="{Binding label, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>
我删除了 Interaction.Triggers
并将 MouseDown
添加到 TextBlock
。
如果有人使用绑定提供答案,我将不胜感激。