4つのピボットがあるピボットページがあります。2つのピボットには、グリッドの形式で情報を入力するリストボックスがあります。ListItemsを、WCFから非同期でフェッチされた情報で満たされたObservableCollectionにバインドします。
ただし、DataContextが設定されていて、UIがリストボックスにデータを入力している場合、UIはフリーズしているように見えます。ListItemが多いほど、フリーズする時間が長くなります。
編集:Calrification。ページを上下にスクロールすることはできますが、スワイプして別のピボットに移動することはできません。遷移は、UIのフリーズが解除された後に発生します。
UIをフリーズせずにリストボックスを埋める方法はありますか?
編集:何が起こるかを大まかに説明するいくつかのサンプルコード。
リストボックス
<ListBox Name="lbInterruptYesterday" ScrollViewer.VerticalScrollBarVisibility="Disabled"
ItemsSource="{Binding Interrupts}"
ItemTemplate="{StaticResource InterruptListItem}" Tap="Interrupt_OnTap">
</ListBox>
割り込みは、割り込みオブジェクトを含むObservableCollectionです。
InterruptListItemには、TextBlocksを含むグリッドが含まれ、テキストは、Interrupt-objectの変数にバインドされています。
WCFへの非同期呼び出しでデータをフェッチします。完了したら、次のことを行います。
(sender, e) => Deployment.Current.Dispatcher.BeginInvoke(() =>
{
//Some code handling the result which I put in the ObservableCollection
Production.Interrupts.add(new Interrupt());
//Set the DataContext
DataContext = Production;
});
また、DataContextが設定されると、UIは更新されるまでフリーズします。