Silverlight DataGrid再描画の問題
-
06-07-2019 - |
質問
ユーザーコントロールを表示する単一のテンプレート列を含むSilverlight DataGridがあります。ユーザーコントロールには、処理を表す進行状況バーがあり、処理が完了すると、アニメーションによって進行状況バーが非表示になり、完成したラベルが表示されます。
データグリッドが再描画されないように見える2つのインスタンスがあります:
最初、 ユーザーが多くのスクロールを行うと、ユーザーコントロールが表示されるとデータグリッドがアニメーションの再描画を開始し、最終的に何も再描画されないポイントに到達します。
2番目、 ユーザーコントロールには、ポップアップを表示するクリックイベントがあります。ポップアップが閉じられると、再びユーザーコントロールは適切に再描画できません。
この動作が発生する理由とその回避策についてのアイデアはありますか?
解決
前の答えは正しいです。コントロールを適切に動作させるには、Loading_RowイベントとUnloading_Rowイベントを適切に処理しなければならないことがあります。私の場合、実際にコントロールプロパティをオブジェクトにバインドすると、最適に機能します。アニメーションや可視性などに依存しようとすると、奇妙な動作が見られますが、プログレスバーを、舞台裏で各アイテムの進行状況を維持しているオブジェクトにバインドすると、その行が表示されるたびに再バインドおよび再描画されます。
他のヒント
DataGridには、グリッド内のすべての行に対してコントロールのインスタンスが1つではないことを理解する必要があります。データソースには数百万行ある場合がありますが、グリッドには画面に収まるよりも多くのコントロールのインスタンスは必要ありません。これは、たとえば、スクロールしても、以前は見えなかったコントロールのインスタンスが表示されないことを意味します。現在のスクロール位置を正しく表示するために必要な値を、現在表示されているコントロールに割り当てるだけです。
回避策があるかどうかわかりません。