2016-04-20 16 views
0

アプリケーションでインクリメンタルロードを実装しました。hasMoreItemsがfalseに設定されている場合、コンストラクタでtrueに設定されたisLoadingブール変数を持ち、falseに設定されています。進捗リングでインクリメンタルロード

private void List_LayoutUpdated(object sender, object e) 
{ 
    if (list.Items.Count == 0 && list.ItemsSource == null) 
     CenterProgressRing.IsActive = true; 
    else if (list.Items.Count == 0 && list.ItemsSource != null) 
    { 
     if (!((IncrementalSource)this.list.ItemsSource).isLoading) 
      CenterProgressRing.IsActive = false; 
     else CenterProgressRing.IsActive = true; 
    } 
    else CenterProgressRing.IsActive = false;   
} 

最初のページがロードされ、受信する項目がある場合、それは、非常に良い働きながらだから、ProgressRingを示している:そして、私はこのように動作しますProgressRingを持っています。しかし、何もロードされない状況になると、ProgressRingは永遠に活動し続けます。なぜ私は理解できません。

答えて

0

まず、条件を単純化します(ネストと否定を削除します)。あなたの最後の項目がダウンロードされた後(レイアウトが更新されないよう)List_LayoutUpdatedが呼び出されていない場合

if (list.ItemsSource == null) 
{ 
    CenterProgressRing.IsActive = false; 
    return; 
} 
CenterProgressRing.IsActive = ((IncrementalSource)this.list.ItemsSource).isLoading; 

そして、それが動作しない場合があります。おそらく、IncrementalSource(イベントを実装している場合やisLoadingを観測可能な場合)のCenterProgressRing.IsActiveを更新するか、最後の項目の後にList_LayoutUpdatedがダウンロードされていることを確認してください。

+0

最後のアイテムがダウンロードされた後に、あなたは 'List_LayoutUpdated'が呼び出されていないことが正しいと思います。 'isLoading'を観測可能にすることは役に立たなかった。しかし、[この投稿](http://stackoverflow.com/questions/27870079/isupportincrementalloading-collection-notify-ui-when-loadingmoreitems-is-in-pr)で提案されているようにアクション/イベントを追加することで作業が完了しました。とにかく、あなたの貢献に感謝し、私はあなたの答えを受け入れられた答えとしてマークします。 – dace