Подтвердить что ты не робот

Увольнение команды в 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>

Но как бы я привел поведение сверху, чтобы запустить команду?

Высоко ценится,

4b9b3361

Ответ 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>