WPF запускает Datagrid Interaction.Triggers для указанного столбца c - PullRequest
0 голосов
/ 22 апреля 2020

Я недавно начал использовать Interaction.Triggers, и мне было интересно, можно ли будет активировать триггер только при нажатии на определенный столбец. В этом случае я хочу, чтобы он запускался, когда пользователь нажимает на элементы столбца Nom Produit (синим цветом).

Связывание уже отлично работает между триггером и сеткой данных. Я просто хочу изменить условие запуска триггера, потому что теперь, куда бы пользователь ни щелкал в строке (даже кнопки Action, Impression/Édition), он будет запускаться.

enter image description here

Вот уменьшенная версия моего ProductsListView.xaml.

<DataGrid x:Name="myDataGrid" ItemsSource="{Binding ProductsList}" x:FieldModifier="public" AutoGenerateColumns="False">

    <DataGrid.Columns>
         <DataGridTextColumn Header="No MAT" Binding="{Binding MATProductNumber}" IsReadOnly="True" Width="0.1*"/>
         <DataGridTextColumn Header="Format" Binding="{Binding tblFormat.FormatName}" IsReadOnly="True" Width="0.1*"/>
    </DataGrid.Columns>

    <i:Interaction.Triggers>
         <i:EventTrigger EventName="SelectionChanged">
              <i:InvokeCommandAction Command="{Binding ProductNavCommand}" 
    CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
         </i:EventTrigger>
    </i:Interaction.Triggers>

</DataGrid>

Заранее спасибо!

1 Ответ

1 голос
/ 03 мая 2020

Вы можете определить шаблон CellTemplate для столбца «Nom Produit» и разместить там свои Interaction.Triggers:

<DataGridTemplateColumn Header="Nom Produit" MinWidth="120">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Propriete2, Mode=OneWay}">
                                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="MouseLeftButtonUp">
                            <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=DataContext.ProductNavCommand}" 
CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                                </TextBlock>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

Таким образом, он будет срабатывать только тогда, когда щелчок находится в столбце «Nom Produit». (Как показано выше, вам нужно изменить привязку, чтобы команда привязывалась к вашей модели представления).

...