5

私のViewModelは、ユーザーのクリックに基づいてビューを選択します。ビューの 1 つには多くの視覚要素が含まれています。データ テンプレートを含むビューモデルを含むデータ テンプレートを含むビューモデルで、それぞれが背景のイメージブラシを使用してキャンバスにレンダリングされます。全体ビューは、約 100 個のこれらのキャンバス ブラシで終わります。それぞれに 12 個の楕円が重ねられており、ビュー全体がスクロール可能なビューボックスにあります。

このビューが初めて作成されたとき、ユーザーはクリックしてから、すべてがレンダリングされるまでしばらく待ちます。このレンダリングをもっと早い段階 (たとえば、起動時) に行いたいと考えています。ビュー オブジェクトを作成しましたが、ユーザーがクリックすると、レンダリングが完了している間、まだぶらぶらしています。

WPF/xaml を事前にレンダリングしてクリック応答を改善する方法はありますか?

4

1 に答える 1

4

ご覧のとおり、MVVMパターンを使用しています。私は次のアプローチを試してみます:

起動時にビューを作成し、それをビューDataContextモデルインスタンスに設定します。次に、WPFが実行する作業をシミュレートします。Measure()ビューのメソッドとメソッドを呼び出して、 Arrange()WPFにデータバインディングを更新し、ビジュアルツリーを生成するように強制します。

ただし、UIスレッドは1つだけです。したがって、この時点で、スタートアップルーチンが再びブロックされます。「作業」を小さな部分に分割することで、これを回避できます。ビューモデルにアイテムのコレクションがあるかもしれません。次に、使用DipatcherTimerして各ステップで適切な量のアイテムをコレクションに追加し、各反復後にMeasure and Arrangeを呼び出して、ビューのビジュアルツリーを更新できます。ビューが完全に初期化された後、レンダリングはそれ以上ブロックされるべきではありません。

于 2012-12-10T11:05:52.400 に答える