WPF启动Datagrid交互。在特定列上触发

WPF启动Datagrid交互。在特定列上触发,wpf,mvvm,data-binding,view,binding,Wpf,Mvvm,Data Binding,View,Binding,我最近开始使用Interaction.Triggers,我想知道是否只有在单击某个列时才能激活触发器。在本例中,我希望它在用户单击Nom Produit列(蓝色)的元素时启动 触发器和datagrid之间的绑定已经非常有效了。我只想修改触发器的启动条件,因为现在无论用户在哪一行单击(即使是操作,Impression/Edition按钮),它都会启动 这是我的ProductsListView.xaml的缩小版 <DataGrid x:Name="myDataGrid" ItemsSourc

我最近开始使用
Interaction.Triggers
,我想知道是否只有在单击某个列时才能激活触发器。在本例中,我希望它在用户单击
Nom Produit
列(蓝色)的元素时启动

触发器和datagrid之间的绑定已经非常有效了。我只想修改触发器的启动条件,因为现在无论用户在哪一行单击(即使是
操作,Impression/Edition
按钮),它都会启动

这是我的
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>


提前谢谢

您可以为“Nom Produit”列定义一个CellTemplate,并将您的交互放置在其中。触发器:

<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”列时才会触发。
(如上所示,您必须更改命令绑定到您的ViewModel的绑定)。

您可以为“Nom Produit”列定义一个CellTemplate并将您的交互放置在此处。触发器:

<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”列时才会触发。
(如上所示,您必须更改命令绑定到ViewModel的绑定)。

太好了!非常感谢,这解决了我的问题!上面说我需要等19个小时才能给你赏金。明天肯定会做的:)很高兴有帮助:)太好了!非常感谢,这解决了我的问题!上面说我需要等19个小时才能给你赏金。明天肯定会做:)很高兴有帮助:)