我有一个WPF DataGrid
,其中ItemSource
绑定到类型ICollectionView
的对象。该对象的数据源是ObservableCollection
。根据请求过滤视图,并创建ListCollectionView
并将其用于对数据进行排序。排序和过滤数据,我按预期工作。设置过滤器或设置自定义排序器后,数据将被过滤并在DataGrid
中“实时”排序,这是我要禁用的功能。我的意思是,DataGrid
会由于过滤器和排序器而在用户编辑网格中的数据时发生变化。我认为这与属性ListCollectionView.IsLiveSorting
和ListCollectionView.IsLiveFiltering
有关,但是这两个属性都设置为false。有人知道我在做什么错吗?
我还认为在过滤和排序后,GUI的更新相对较慢。 DataGrid
有23列,每个1500个元素的排序或过滤操作大约需要300毫秒,但是GUI更新大约需要2秒。但这可能是不相关的问题,但我认为我应该提一下。
我的ViewModel中的部分代码:
public ICollectionView CollectionView { get; private set; }
public ICollectionView CollectionViewUnsorted { get; private set; }
public ListCollectionView ListCollectionView { get; private set; }
public ObservableCollection<Connection> ConnectionData { get; private set; }
public ConnectionsViewModel(MainViewModel mainViewModel)
{
this.mainViewModel = mainViewModel;
this.PropertyChanged = ConnectionsViewModelPropertyChanged;
List<Connection> cList = ImportElprocadCSVFiles.ImportConnectionList("fullständig_rapport.csv");
ConnectionData = new ObservableCollection<Connection>(cList);
CollectionView = new ListCollectionView(ConnectionData);
ListCollectionView = CollectionView as ListCollectionView;
ListCollectionView.IsLiveFiltering = false;
ListCollectionView.IsLiveSorting = false;
SetSortCommand = new RelayCommand(SetSort);
UnsetSortCommand = new RelayCommand(UnsetSort);
}
private void SetSort()
{
ListCollectionView.CustomSort = new CableNumberComparer();
CollectionView.Refresh();
}
private void UnsetSort()
{
ListCollectionView.CustomSort = null;
CollectionView.Refresh();
}
部分XAML:
<DataGrid DockPanel.Dock="Right" AutoGenerateColumns="False" Margin="4"
ItemsSource="{Binding CollectionView, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
EnableColumnVirtualization="True" EnableRowVirtualization="True" FontFamily="Console">