如何禁用CollectionView实时排序和过滤?

时间:2019-02-07 15:03:38

标签: c# wpf

我有一个WPF DataGrid,其中ItemSource绑定到类型ICollectionView的对象。该对象的数据源是ObservableCollection。根据请求过滤视图,并创建ListCollectionView并将其用于对数据进行排序。排序和过滤数据,我按预期工作。设置过滤器或设置自定义排序器后,数据将被过滤并在DataGrid中“实时”排序,这是我要禁用的功能。我的意思是,DataGrid会由于过滤器和排序器而在用户编辑网格中的数据时发生变化。我认为这与属性List​Collection​View.​Is​Live​SortingListCollectionView.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">

0 个答案:

没有答案