ピボットアイテムをすばやくスクロールするときに良好なパフォーマンスを確保するには、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;
});
});
を私は次の拡張メソッドを使用します糸? – AnthonyWJones
True;ほとんど必要ありません。実際にはUIスレッドではない場合、実際には別の拡張機能mthodを使用してUIスレッドを呼び出しますが、簡潔さのために省略されています:) –
これはうまくいくものですが、selectedIndex変更?データバインディングが進行中の場合、ピボットはジェスチャに応答せず、データバインディングが完了する前にジェスチャを実行すると、データロード後にジェスチャが実行されます。ピボットは私の動きを覚えていて、データバインディングが完了した後で、たとえ私がこの間にIsHitTestVisibleをfalseに設定したとしても、それらを処理するようです。 – johnX99