DataGrid Combobox SelectionChanged事件在滚动时触发

时间:2018-10-26 14:41:21

标签: c# mvvm datagrid prism selectionchanged

我在数据网格上的组合框的SelectionChanged事件触发器遇到麻烦。

组合框项源已绑定到我的视图模型。 组合框所选项目也已绑定到我的视图模型。

当我更改组合框选定的项目时,将触发视图模型上的委托命令,该命令将关闭并进行更新等。但是,当我滚动数据网格时,也会触发SelectionChanged事件。

我也在使用Prism MVVM。

这是我的 XAML

<DataGrid.Columns>
  <DataGridTemplateColumn Header="Selected Reason" Width="150">
    <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
        <ComboBox ItemsSource="{Binding Path=DataContext.Reasons, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
            SelectedItem="{Binding SelectedReason}">
          <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
              <i:InvokeCommandAction Command="{Binding Path=DataContext.ReasonChangedCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" 
                    CommandParameter="{Binding}"/>
              </i:EventTrigger>
            </i:Interaction.Triggers>
        </ComboBox>
      </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
  </DataGridTemplateColumn>
</DataGrid.Columns>

这是我的查看模型命令:

private DelegateCommand<T> _reasonChangedCommand;
public DelegateCommand<T> ReasonChangedCommand =>
            _reasonChangedCommand ?? (_reasonChangedCommand = new DelegateCommand<T>(ReasonChanged));

    private async void ReasonChanged(T obj)
    {
         if (obj != null)
         {       
             await _updateRepository.UpdateAsync(obj);          
         }
    }

我搜索过的所有文章都讨论了在滚动数据网格时不触发和不触发的命令。对文章的任何帮助或指导将不胜感激。

非常感谢。

1 个答案:

答案 0 :(得分:0)

在使用了不同的事件触发器后,使用DropDownClosed事件可以解决此问题。