InvokeCommandAction не будет работать при использовании в EventTrigger?

#wpf #expression-blend #eventtrigger #invoke-command

#wpf #выражение-blend #eventtrigger #вызвать команду

Вопрос:

это мой первый вопрос о переполнении стека, поэтому, пожалуйста, будьте аккуратны 🙂

В одном из моих окон WPF у меня есть listbox, элементы которого оформлены следующим шаблоном данных:

 <ListBox.ItemTemplate>
<DataTemplate>
    <Grid UseLayoutRounding="True" Width="80">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Border
            Grid.Row="0"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
        >

            <Viewbox 
                Height="110"
                Width="50"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
            >
            <Grid Background="#77ffffff" Margin="0">
                <i:Interaction.Triggers>
                    <ei:KeyTrigger Key="Return">
                        <i:InvokeCommandAction 
                            Command="{Binding SelectModelCommand}"
                            CommandParameter="{Binding}"
                        />
                    </ei:KeyTrigger>
                    <i:EventTrigger EventName="MouseDoubleClick">
                        <i:InvokeCommandAction 
                            Command="{Binding SelectModelCommand}"
                            CommandParameter="{Binding}"
                        />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
                <Path Stroke="{DynamicResource FontBrush}"
                    StrokeThickness="100"
                    Data="{Binding DrawingPathString, FallbackValue={x:Static bll:Panel.NoDrawing}}"/>
            </Grid>
            </Viewbox>
        </Border>

        <TextBlock 
            Grid.Row="1"
            FontSize="8"                
            TextWrapping="NoWrap"  
            HorizontalAlignment="Center"
            Text="{Binding Path=BLLPanel.Model,FallbackValue=MODEL}"
        />
        <TextBlock 
            Grid.Row="2"
            FontSize="8"                
            TextWrapping="NoWrap" 
            HorizontalAlignment="Center"
            Text="{Binding Path=BLLPanel.PanelFamily.Description,FallbackValue=FAMILY}"
        />
    </Grid>
</DataTemplate>
  

Обратите внимание на два триггера в сетке:

  • KeyTrigger, который вызывает ICommand в моей модели представления

  • EventTrigger, который должен делать точно то же самое, но по какой-то неизвестной причине не делает

Кто-нибудь может объяснить мне, почему? Спасибо за ваше время и внимание

Sven

Комментарии:

1. Объект command, к которому вы привязываетесь (SelectModelCommand), возвращает true для CanExecute?

2. Привет, спасибо за ответ. Отвечая на ваш вопрос: да, ICommand возвращает правильное значение. Об этом свидетельствует тот факт, что KeyTrigger работает должным образом.

Ответ №1:

Дело в том, что нет MouseDoubleClick события…

Но я полагаю, что то, что вы пытаетесь сделать, может быть легко достигнуто с помощью ImputBindings :

 <Grid Background="#77ffffff" Margin="0">
            <Grid.InputBindings>
                <MouseBinding Gesture="LeftDoubleClick" Command="{Binding SelectModelCommand}"/>
            </Grid.InputBindings>
    ...
</Grid>
  

Комментарии:

1. Спасибо за ваш ответ, Павел. Мне придется попробовать это, чтобы посмотреть, сработает ли это (в данный момент я занят другими делами).

2. Обновление: оказывается, предложение Павло тоже не сработало. Согласно этой теме на форумах msdn , это связано с ошибкой в WPF. 🙁 В итоге я последовал предложению Марко Чжоу об обработке предварительного просмотра MouseDoubleClick в коде за. Фу! Позор вам, Microsoft, за то, что вы до сих пор не исправили эту ошибку.