@@ -33,6 +33,8 @@ public abstract partial class CccfQueryViewModelBase : ObservableRecipient
3333
3434 protected CccfRequest ? _lastCombinedRequest ;
3535
36+ protected int _lastPageNumberBeforeCancel = 1 ;
37+
3638 protected bool _pageNumberChanged ;
3739
3840 protected bool _pageSizeChanged ;
@@ -55,7 +57,7 @@ public abstract partial class CccfQueryViewModelBase : ObservableRecipient
5557
5658 public bool CanQuery => ! IsNavigating ;
5759
58- public bool CanRefresh => QueryResponse is not null && CanQuery ;
60+ public bool CanRefresh => CanQuery ;
5961
6062 public CccfRequest CccfRequest => UseCombinedQuery ? CombinedRequest : SmartRequest ;
6163
@@ -210,6 +212,7 @@ public virtual async Task QueryAsync(CancellationToken cancellationToken = defau
210212 {
211213 try
212214 {
215+ _lastPageNumberBeforeCancel = PageNumber ;
213216 HasError = false ;
214217 QueryResultMessage = "" ;
215218
@@ -281,14 +284,36 @@ await _navigationService.NavigateAsync(async () => {
281284 SmartRequest . RejectChanges ( ) ;
282285 CccfRequest . RejectChanges ( ) ;
283286
284- await QueryCommand . ExecuteAsync ( cancellationToken ) ;
287+ CccfQuerySession session ;
288+ PageNumber = _lastPageNumberBeforeCancel ;
285289
286- var session = new CccfQuerySession (
290+ try
291+ {
292+ await QueryCommand . ExecuteAsync ( cancellationToken ) ;
293+ }
294+ catch ( TaskCanceledException )
295+ {
296+ session = new CccfQuerySession (
297+ _lastPageNumberBeforeCancel ,
298+ SmartRequest ,
299+ CombinedRequest ,
300+ UseCombinedQuery ,
301+ QueryResponse ,
302+ HasError ,
303+ "刷新请求被取消。" ,
304+ _scrolledVerticalOffset ) ;
305+
306+ return session ;
307+ }
308+
309+ session = new CccfQuerySession (
287310 PageNumber ,
288311 SmartRequest ,
289312 CombinedRequest ,
290313 UseCombinedQuery ,
291314 QueryResponse ,
315+ HasError ,
316+ QueryResultMessage ,
292317 _scrolledVerticalOffset ) ;
293318
294319 return session ;
@@ -363,6 +388,8 @@ await _navigationService.NavigateAsync(async () => {
363388 CombinedRequest ,
364389 UseCombinedQuery ,
365390 QueryResponse ,
391+ HasError ,
392+ QueryResultMessage ,
366393 0d ) ;
367394
368395 try
@@ -373,6 +400,7 @@ await _navigationService.NavigateAsync(async () => {
373400 catch ( TaskCanceledException )
374401 {
375402 session . QueryResponse = null ;
403+ session . QueryResultMessage = "查询请求被取消。" ;
376404 }
377405
378406 Messenger . Send ( new ScrollBarOffsetMessage ( ) {
@@ -419,13 +447,16 @@ protected virtual void NavigationService_Navigated(object? sender, NavigationEve
419447 if ( e . NavigationMode is NavigationMode . Back or NavigationMode . Forward )
420448 {
421449 var cloned = e . Current . DeepClone ( ) ;
450+ _lastPageNumberBeforeCancel = cloned . PageNumber ;
422451 PageNumber = cloned . PageNumber ;
423452 SmartRequest = cloned . SmartRequest ;
424453
425454 // 必须先设置 UseCombinedQuery,否则 OnUseCombinedQueryChanged() 将修改 CombinedRequest
426455 UseCombinedQuery = cloned . UseCombinedQuery ;
427456 CombinedRequest = cloned . CombinedRequest ;
428457 QueryResponse = cloned . QueryResponse ;
458+ HasError = cloned . HasError ;
459+ QueryResultMessage = cloned . QueryResultMessage ;
429460
430461 double scrolledVerticalOffset = cloned . ScrolledVerticalOffset ;
431462
0 commit comments