如您所知,无法将事件直接绑定到没有行为的命令:
<DataGrid>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDoubleClick">
<i:InvokeCommandAction Command="{Binding TradeEntryCommand"} />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
这非常好用,但是现在我必须通过双击DataGrid本身来双击Cell来重构它。 (我不关心点击了哪个单元格)
我希望现在在Cell Style中定义这个behviour,如下所示:
<Style x:Key="DefaultCellStyleBase" TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="PreviewMouseDoubleClick">
?????????
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<!-- ... -->
</Style>
但是我如何从上面引入行为来触发命令呢?
非常感谢,
答案 0 :(得分:7)
由于您正在重新模拟DataGridCell,因此可以将触发器添加到控件模板中的根元素。类似的东西:
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid x:Name="root" Background="Transparent">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDoubleClick">
<i:InvokeCommandAction Command="{Binding TradeEntryCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>
</ControlTemplate>
答案 1 :(得分:3)
这是我在类似情况下用于Button命令的版本(DataGridRow中的Button,DataGrid上的Command应该由Button调用,我需要命令中的行的DataContext)。你必须使用doubleClick-trigger的InvokeCommandAction命令,但是我认为它应该也能正常工作。
祝你好运! <DataTemplate>
<TextBlock>
<Button x:Name="cmdButton"
Command="{Binding Path=DataContext.CommandNameInViewModel,
RelativeSource={RelativeSource AncestorType={x:Type TypeOfAncestorWithTheViewModel}}}"
CommandParameter="{Binding}" >
Do something
</Button>
</TextBlock>
</DataTemplate>