2017-08-25 33 views
0

私のWPFアプリケーションでははGridViewで、それはViewです。 ListViewItemsSourceは、ViewModelのItemsCollectionにバインドされています。WPF:アニメーションをブロックせずにUIを更新する方法

このGridViewには多くの列があり、ListViewには多くの項目があります。

ListView私は、サーバーから新しいデータを取得し、ViewModelのItemsCollectionを新しいデータで更新している間に、読み込み中のアニメーションを表示します。

このデータの取得はすでに非同期に行われているため、読み込みアニメーションは回転し続けます。しかし、データが取得され、バインディングがListViewを更新するとすぐに、読み込みアニメーションはUIの更新が終了するまでフリーズします。

バインディングでUIが更新されても読み込みアニメーションが回転し続けるようにするにはどうすればよいですか?

ありがとうございました。

+0

ObservableCollectionをいくつかのレコードで更新していますか?その場合、個々のレコードの追加ごとにCollectionChangedイベントが発生しています。各イベントはUI更新をトリガーします。 –

+0

はい、ViewModelのObservableCollectionを更新します。このUIの更新では、UIスレッドで発生するアニメーションもフリーズしています。 – Nostromo

+0

ObservableCollectionに〜1kのエントリを追加する必要があり、UIが数秒間応答しなくなってしまうという問題がありました。 BulkAdd()メソッドを持つObservableCollectionから派生したクラスを作成して解決しました。すべてのエントリが追加された後で、1つのイベントしか発生しませんでした。パフォーマンスが大幅に向上しました。 –

答えて

-1

EDIT:

まあ、結合メインスレッドで実行し、同じことがあなたのアニメーションの実行スレッドという。

明らかに私の以前の解決策はあなたを助けません。ビューのレンダリングに要する時間を短縮する方法を見つける必要があります。いくつかの作業コードを共有してください。誰かがあなたを助けるかもしれません。

その他の方法は、アニメーションを停止して静的なものを表示することです。そうすることで、問題を隠すことができます。それは素晴らしい解決策ではありませんが、あなたが他を見つけることができなければ、これはあなたの唯一のものです。

+0

私はすでに、私のデータを非同期的に取得しています。これは、アニメーションをブロックするデータを取得した後のバインディングの更新です。 – Nostromo

+0

いくつかのコードを教えてください。バインディングを更新すると、リストビューのソースであるバインディングプロパティが更新されますか? –

+0

はい、ViewModelのObservableCollectionを更新します。これは、リストビューのItemsSourceにバインドされています。私は明日ここにいくつかのコードを置くことができます。 – Nostromo

関連する問題