为什么不';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
?
在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());