11using System ;
2- using System . Collections . Generic ;
3- using System . Linq ;
4- using System . Text ;
2+ using System . ComponentModel ;
3+ using System . Diagnostics ;
4+ using System . Threading ;
55using System . Threading . Tasks ;
6+ using System . Windows . Data ;
67using AlphaChiTech . Virtualization ;
8+ using DataGridAsyncDemoMVVM . filtersort ;
9+ using GalaSoft . MvvmLight . Command ;
710
811namespace DataGridAsyncDemoMVVM
912{
10- class MainViewModel
13+ internal class MainViewModel
1114 {
12- private VirtualizingObservableCollection < RemoteOrDbDataItem > _myDataVirtualizedAsyncFilterSortObservableCollection = null ;
13- private RemoteOrDbDataSourceAsyncProxy _myRemoteOrDbDataSourceAsyncProxy = null ;
15+ private readonly RemoteOrDbDataSourceAsyncProxy _myRemoteOrDbDataSourceAsyncProxy ;
16+ private VirtualizingObservableCollection < RemoteOrDbDataItem > myDataVirtualizedAsyncFilterSortObservableCollection ;
1417
15- public VirtualizingObservableCollection < RemoteOrDbDataItem > MyDataVirtualizedAsyncFilterSortObservableCollection
18+ public MainViewModel ( )
1619 {
17- get
20+ this . _myRemoteOrDbDataSourceAsyncProxy = new RemoteOrDbDataSourceAsyncProxy ( new RemoteOrDbDataSourceEmulation ( 100 ) ) ;
21+ this . myDataVirtualizedAsyncFilterSortObservableCollection =
22+ new VirtualizingObservableCollection < RemoteOrDbDataItem > (
23+ new PaginationManager < RemoteOrDbDataItem > ( this . _myRemoteOrDbDataSourceAsyncProxy ,
24+ pageSize : 10 , maxPages : 2 ) ) ;
25+ this . MyDataVirtualizedAsyncFilterSortObservableCollectionCollectionView =
26+ CollectionViewSource . GetDefaultView ( myDataVirtualizedAsyncFilterSortObservableCollection ) ;
27+
28+ this . FilterCommand = new RelayCommand < object > ( async o => await this . Filter ( o as MemberPathFilterText ) ) ;
29+ }
30+
31+ private int _filterWaitingCount = 0 ;
32+ private async Task Filter ( MemberPathFilterText memberPathFilterText )
33+ {
34+ if ( String . IsNullOrWhiteSpace ( memberPathFilterText . FilterText ) )
1835 {
19- if ( this . _myDataVirtualizedAsyncFilterSortObservableCollection == null )
20- {
21- this . _myRemoteOrDbDataSourceAsyncProxy = new RemoteOrDbDataSourceAsyncProxy ( new RemoteOrDbDataSourceEmulation ( ) ) ;
22- this . _myDataVirtualizedAsyncFilterSortObservableCollection =
23- new VirtualizingObservableCollection < RemoteOrDbDataItem > (
24- new PaginationManager < RemoteOrDbDataItem > ( this . _myRemoteOrDbDataSourceAsyncProxy , pageSize : 10 , maxPages : 2 ) ) ;
25- }
26- return this . _myDataVirtualizedAsyncFilterSortObservableCollection ;
36+ this . _myRemoteOrDbDataSourceAsyncProxy . FilterDescriptionList . Remove ( memberPathFilterText
37+ . ColumnSortMemberPath ) ;
2738 }
39+ else
40+ {
41+ this . _myRemoteOrDbDataSourceAsyncProxy . FilterDescriptionList . Add ( new FilterDescription ( memberPathFilterText . ColumnSortMemberPath , memberPathFilterText . FilterText ) ) ;
42+ }
43+ Interlocked . Increment ( ref this . _filterWaitingCount ) ;
44+ await Task . Delay ( 500 ) ;
45+ if ( Interlocked . Decrement ( ref this . _filterWaitingCount ) != 0 ) return ;
46+ this . _myRemoteOrDbDataSourceAsyncProxy . FilterDescriptionList . OnCollectionReset ( ) ;
47+ this . myDataVirtualizedAsyncFilterSortObservableCollection . Clear ( ) ;
2848 }
49+
50+ public ICollectionView MyDataVirtualizedAsyncFilterSortObservableCollectionCollectionView { get ; }
51+
52+ public RelayCommand < object > FilterCommand { get ; }
2953 }
30- }
54+ }
0 commit comments