【问题标题】:WPF launch Datagrid Interaction.Triggers on specific columnWPF 在特定列上启动 Datagrid Interaction.Triggers
【发布时间】:2020-08-05 19:23:11
【问题描述】:

我最近开始使用Interaction.Triggers,我想知道是否可以仅在单击某个列时激活触发器。在这种情况下,我希望它在用户单击 Nom Produit 列(蓝色)的元素时启动。

触发器和数据网格之间的绑定已经很好地工作了。我只想修改触发器的启动条件,因为现在用户在行中单击的任何位置(甚至是Action, Impression/Édition 按钮)都会启动。

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

提前致谢!

【问题讨论】:

    标签: wpf mvvm data-binding view binding


    【解决方案1】:

    您可以为“Nom Produit”列定义一个 CellTemplate 并将您的 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”列时触发。 (如上所示,您必须更改命令的绑定才能绑定到您的 ViewModel)。

    【讨论】:

    • 太棒了!非常感谢,解决了我的问题!它说我需要等待 19 个小时才能给你赏金。明天肯定会做:)
    • 很高兴有帮助:)
    猜你喜欢
    • 2020-04-12
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多