2011-01-17 8 views
4

私はピボットコントロールを持っています。そのアイテムにはアイテムのあるリストボックスが含まれています。 次のピボットアイテムにスクロールするとデータバインディングに時間がかかるため、リストボックスを表示する準備ができたらすぐにメニューバーを有効にする必要があるため、データバインドが完了したことを知りたいと思います。 ここで私を助けることができるイベントが見つかりませんでした。私はリストボックスのLoadedイベントを試しましたが、いくつかのピボットアイテムで動作していましたが、いくつかのピボットアイテムでは起動しませんでした。 レイアウト更新イベントも試しましたが、何度も起動されてしまいました。リストのデータバインディングが完了したら、どうすれば確認できますか? (wp7)

私は何ができますか? ありがとう

答えて

1

ピボットアイテムをすばやくスクロールするときに良好なパフォーマンスを確保するには、SelectedIndexが変更されるまでピボットアイテムの内容をバインドするのを待つ必要があります。ユーザーがピボットアイテム間をすばやくスワイプしている間にバインドしようとしません。ピボットアイテムで停止した場合のみバインドされます。

次に、LayoutUpdatedイベントのピボットアイテムのListBoxのItemsSourceプロパティを設定する必要があります。


     public static void InvokeOnLayoutUpdated(this FrameworkElement element, Action action) 
     { 
      if (element == null) 
      { 
       throw new ArgumentNullException("element"); 
      } 
      else if (action == null) 
      { 
       throw new ArgumentNullException("action"); 
      } 

      // Create an event handler that unhooks itself before calling the 
      // action and then attach it to the LayoutUpdated event. 
      EventHandler handler = null; 
      handler = (s, e) => 
      { 
       element.LayoutUpdated -= handler; 
       action(); 
      }; 
      element.LayoutUpdated += handler; 
     } 

だから、あなたは、このような何かを見ていくつかのコードだろう:なぜUI上Dispatch.BeginInvoke、その `LayoutUpdated`イベントが確実に起動


pivot.InvokeOnLayoutUpdate(() => 
    { 
    Dispatcher.BeginInvoke(() => 
     { 
     list.ItemsSource = source; 
     ApplicationBar.IsMenuEnabled = true; 
     }); 
    }); 
+0

を私は次の拡張メソッドを使用します糸? – AnthonyWJones

+0

True;ほとんど必要ありません。実際にはUIスレッドではない場合、実際には別の拡張機能mthodを使用してUIスレッドを呼び出しますが、簡潔さのために省略されています:) –

+0

これはうまくいくものですが、selectedIndex変更?データバインディングが進行中の場合、ピボットはジェスチャに応答せず、データバインディングが完了する前にジェスチャを実行すると、データロード後にジェスチャが実行されます。ピボットは私の動きを覚えていて、データバインディングが完了した後で、たとえ私がこの間にIsHitTestVisibleをfalseに設定したとしても、それらを処理するようです。 – johnX99

関連する問題