在 ItemSource 刷新时删除的数据网格行突出显示

本文关键字:网格 显示 数据网 数据 刷新 ItemSource 删除 | 更新日期: 2023-09-27 18:36:15

我有一个People DataGrid,我可以从中删除People。删除Person后,我调用以下方法;

private void SetSelectedPerson(int personDeleted, int personID)
{
    if (peopleDataGrid.SelectedIndex > 0)
    {
        peopleDataGrid.SelectedIndex--;
    }
    else
    {
        peopleDataGrid.SelectedIndex = 0;
    }  
}

这确实会选择上一个Row,但是它会从SelectedRow中删除突出显示。这不是我想要的,因为尽管SelectedIndex是正确的,但看起来不像是向用户选择了Row

我确实刷新了DataGrid ItemSource,以便从当前Collection中删除已删除的Person。如果我不刷新ItemSource,突出显示是正确的,但当然删除的Person不会从DataGrid中删除。

我刷新ItemSource使用;

  People = await ReturnPeople();
  PeopleICollectionView = CollectionViewSource.GetDefaultView(People);
  peopleDataGrid.ItemsSource = PeopleICollectionView;
  DataContext = this;

如何在ItemSource更新中突出显示Row

编辑:对于樱花

这就是我如何绑定DataGrid,如果我删除ItemSource的硬代码..

 People = await ReturnPeople();
 PeopleICollectionView = CollectionViewSource.GetDefaultView(People);
 DataContext = this;

而在XAML;

        <DataGrid x:Name="peopleDataGrid" IsReadOnly="true" Margin="10,15,10,5" ColumnWidth="*" FontSize="14" 
                      HeadersVisibility="Column" AutoGenerateColumns="False" CanUserAddRows="False" 
                      SelectionChanged="DataGridSelectionChanged" ItemsSource="{Binding PeopleICollectionView}">

但是,当我删除一个人时,它不会在DataGrid更新......

在 ItemSource 刷新时删除的数据网格行突出显示

删除一个人后,我调用以下方法...

首先,如果您的DataGrid是单选模式,则当您删除所选项目时,所选索引将设置为 -1。 如果是多选模式,它将返回另一个选定项目的索引,如果没有,则返回 -1。因此,在删除行之前,您必须获取数据网格的选定索引。然后在删除后使用此值。

其次,如果数据网格已正确绑定,则无需刷新数据上下文即可使其更新。
如果有兴趣解决此问题,请在此处发布绑定代码。