0

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は更新されるまでフリーズします。

4

1 に答える 1

0

これObservableCollection、追加するすべてのアイテムで UI を更新するイベントを発生させることが原因である可能性があります。多くの項目を追加すると、時間がかかる場合があります。解決策は、イベントの発生に関して、一時停止および再開できる、より賢い ObservableCollection を作成することです。これが役立つかどうかを試して確認できる例を次に示します。

于 2013-02-18T13:30:25.870 に答える