Увольнение команды в EventTrigger стиля?
Как вы знаете, вы не можете привязывать событие непосредственно к команде без поведений:
<DataGrid>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDoubleClick">
<i:InvokeCommandAction Command="{Binding TradeEntryCommand"} />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
Это работает отлично, однако теперь мне нужно реорганизовать это, дважды щелкнув сам DataGrid, чтобы дважды щелкнуть по ячейке. (Мне все равно, какая ячейка была нажата)
Я надеялся определить это поведение теперь внутри стиля ячейки следующим образом:
<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>
Но как бы я привел поведение сверху, чтобы запустить команду?
Высоко ценится,
Ответы
Ответ 1
Поскольку вы обновляете 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>
Ответ 2
Это версия, которую я использую для Button-команды в аналогичной ситуации (Button в DataGridRow, Command в DataGrid должен вызываться Button, и мне нужна DataContext строки в моей команде). Вам придется использовать команду InvokeCommandAction из doubleClick-trigger вместо этого, но тогда она также должна работать, я полагаю.
Удачи!
<DataTemplate>
<TextBlock>
<Button x:Name="cmdButton"
Command="{Binding Path=DataContext.CommandNameInViewModel,
RelativeSource={RelativeSource AncestorType={x:Type TypeOfAncestorWithTheViewModel}}}"
CommandParameter="{Binding}" >
Do something
</Button>
</TextBlock>
</DataTemplate>