質問: カスタムコントロールによるSilverlight DataGrid仮想化 Silverlight 4アプリケーションにデータグリッドがあります。 私はまた、数値だけを取り、いくつかの他の特定のことを行うカスタムのテキストボックスを作った。 また、バインドするカスタムコントロールの10進依存プロパティを追加しました。これは、コントロールがTextBoxから継承するTextの書式設定されたバージョンを返します。 次に、データグリッドのitemssourceをobservablecolletionにバインドします。 DataGridTemplateColumnを使用して、カスタムコントロールをDataGridの列の1つとして追加しました。 データグリッドの仮想化以外はすべてうまく動作します。 DataGridに項目を追加する場合は、カスタムコントロールの値を編集し、行を削除して、新しい行(完全な新しいインスタンス)を追加します。カスタムコントロールの値は削除された行の値です。 クリアするために、それは拘束力のあるミスやそんなものではありません。 問題は、カスタムテキストボックスのコンストラクタが呼び出されていないことと、カスタムコントロールの実際の値を変更するまでバインディングが更新されないことです。 データグリッドの仮想化は、以前に作成されたコントロールを再利用しています。 私は仮想化を無効にしたくありません。 カスタムコントロールをリサイクル(仮想化)する方法を指定する方法はありますか? または、コントロールが仮想化またはリサイクルされたときに発生するイベントですか? どんな助けでも大歓迎です。
回答: Silverlight 5にアップグレードする可能性はありますか? SL 5では、DataContextChangedイベントがあります。このイベントは、コントロールが別の行を描画するために再利用されたことを検出する優れた方法です。 SL 5がオプションでない場合、Loadedイベントでそれを捕まえることができます。私は完全にはわかりませんが、コントロールが再利用されたときにLoadedを起動する必要があると思います。 Loadedが呼び出されると、現在のDataContextを一時変数に保存します。次回、ロードされたDataContextを現在のものと比較し、変更されている場合は、必要に応じてロジックを再実行します。