これは一般的な質問です...私が書いたユーザーコントロールがあります(カスタムコントロールではなく、ユーザーコントロール)。私はこのコントロールを DataGridColumn で使用して、ルックアップ機能を提供しています..次のように:
<DataGridTemplate ColumnHeader="Company">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<lookupCtl:LookUpCTL SelectedCompany="{Binding Company, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
CompanyChangedCommand="{Binding DataContext.CompanyChangedCmd, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
私が気づいているのは、親/包含コントロールの dataconext が変更されるたびに、LookUpCTL のコンストラクターが呼び出されることです。これは予想される動作ですか?とにかくこれを防ぐには?なぜこれが必要なのかわかりません...コントロールの単一のインスタンスは、私が思うデータコンテキストからそれ自体を更新できるはずです。
編集:グーグルは明確な答えを提供していません...しかし、私が読んだことから、問題はデータグリッドである可能性があります。私のコントロールはデータグリッドで使用されているため、グリッドのアイテムソースが変更されるたびに、コントロールが破棄されて再作成されますか? そうするのは理にかなっています..しかし、それが私が見ている理由であるかどうかはわかりません。データグリッドのアイテムソースが変更されたときに、新しいインスタンスを作成するのではなく、データグリッドにユーザーコントロールのインスタンスを再利用させる方法はありますか?