Запустить команду в EventTrigger стиля? - PullRequest
11 голосов
/ 11 мая 2011

Как вы знаете, вы не можете привязать Событие напрямую к команде без поведения:

<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>

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

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

Ответы [ 2 ]

7 голосов
/ 11 мая 2011

Поскольку вы повторно используете шаблон 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>
3 голосов
/ 27 июня 2011

Это версия, которую я использую для Button-команды в аналогичной ситуации (Button в DataGridRow, Command on DataGrid должна вызываться Button, и мне нужен DataContext строки в моей команде). Вместо этого вам придется использовать команду InvokeCommandAction для doubleClick-триггера, но тогда она должна работать, я полагаю.

Удачи!

    <DataTemplate>
            <TextBlock>                             
           <Button x:Name="cmdButton"                            
                                    Command="{Binding Path=DataContext.CommandNameInViewModel, 
                                        RelativeSource={RelativeSource AncestorType={x:Type TypeOfAncestorWithTheViewModel}}}"
                                    CommandParameter="{Binding}" >      
                                    Do something
        </Button>

    </TextBlock>  
</DataTemplate>     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...