为什么不';t在I';We’我已对网格进行了排序

本文关键字:网格 排序 We 为什么不 | 更新日期: 2023-09-27 18:20:35

背景

我有一个DataGrid,在对数据网格进行排序时,从其数据源列表中删除项目后,它似乎无法正确显示数据。

这是我的网格:

   <DataGrid Name="fileGrid" 
              SelectionMode="Single" SelectionUnit="FullRow" AutoGenerateColumns="False" 
              HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionChanged="fileGrid_SelectionChanged" PreviewKeyDown="PreviewKeyDownHandler">
        <DataGrid.Columns>
            <!-- other columns removed for brevity -->
            <DataGridTextColumn Header="Installation"  SortMemberPath="Customer.CompanyName" Width="*"
                x:Name="columnCompanyName" 
                Binding="{Binding Path=Customer.CompanyName}"
                IsReadOnly="True">
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

我可以从列表中删除一个项目,例如通过调用

    public void DeleteAndRebind(PanelData panelData)
    {
        _panelDataList.Remove(panelData);
        Rebind();
    }

其中Rebind()定义为

    public void Rebind()
    {
        fileGrid.ItemsSource = _panelDataList;
        fileGrid.SelectedItem = _panelDataList.FirstOrDefault();
        fileGrid.Items.Refresh();
    }

并且删除了与panelData相对应的行后,网格正确显示。

问题

但是,如果我按任意列对网格进行排序,然后调用DeleteAndRebind(panelData),则DataGrid仍然包含我删除的项,即使_panelDataList没有。

问题

当我对网格进行排序并从中删除项目时,为什么DataGrid不显示更新的_ panelDataList

为什么不';t在I';We’我已对网格进行了排序

在WPF中,不需要分离或重新绑定数据源集合。一旦将数据集合属性数据绑定到ItemsSource属性,就应该不使用ItemsSource属性和控件。

<DataGrid ItemsSource="{Binding CollectionProperty}" ... />

所有的数据操作都应该在集合本身上完成。因此,要更改集合,只需执行以下操作:

CollectionProperty = new ObservableCollection<YourDataType>();
CollectionProperty.FillWithData(); // An imaginary data access method

要从集合中删除项目,只需执行以下操作:

CollectionProperty.Remove(CollectionProperty.ElementAt(indexOfItemToRemove));

要将项目添加到集合中,只需执行以下操作:

CollectionProperty.Add(new YourDataType());