このための一般的な技術である:
1)あなたのウィンドウのビューモデルにIsBusy
プロパティを作成します。変更するとPropertyChanged
が発生することを確認してください。
2)アイテムがクリックされたときに実行されるコードでは、長時間実行されるタスクを実行するためにBackgroundWorker
を使用します。
3)BackgroundWorker.DoWork()
を呼び出す前に、IsBusy
をtrueに設定してください。 BackgroundWorker.RunWorkerCompleted
が呼び出されたときに呼び出されるイベントハンドラでは、IsBusy
をfalseに設定します。ウィンドウのDataTemplate
で
4)、IsBusy
に結合DataTrigger
とStyle
を追加し、画像の可視性を制御するためにそれを使用。あなたの代わりに、ウィンドウのビューモデルのアイテムビューモデルにIsBusy
(と長時間実行タスクとBackgroundWorker
)を移動することができ、そして項目についてDataTemplate
に「ロード」のアニメーションを追加することができ
注意。
これを行うと、ユーザーは複数のアイテムを同時にロードすることができ、TreeView
のアイテムの1つがクリックされただけでアプリケーション全体がロックされません。 (もちろん、複数のレポートを同時に生成する際のマルチスレッドの問題に対処する必要があります)。