0

これは一般的な質問です...私が書いたユーザーコントロールがあります(カスタムコントロールではなく、ユーザーコントロール)。私はこのコントロールを 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 のコンストラクターが呼び出されることです。これは予想される動作ですか?とにかくこれを防ぐには?なぜこれが必要なのかわかりません...コントロールの単一のインスタンスは、私が思うデータコンテキストからそれ自体を更新できるはずです。

編集:グーグルは明確な答えを提供していません...しかし、私が読んだことから、問題はデータグリッドである可能性があります。私のコントロールはデータグリッドで使用されているため、グリッドのアイテムソースが変更されるたびに、コントロールが破棄されて再作成されますか? そうするのは理にかなっています..しかし、それが私が見ている理由であるかどうかはわかりません。データグリッドのアイテムソースが変更されたときに、新しいインスタンスを作成するのではなく、データグリッドにユーザーコントロールのインスタンスを再利用させる方法はありますか?

4

1 に答える 1

0

データグリッドのアイテムソースが変更されると、データグリッドの DataTemplate 列として使用されるユーザーコントロールが破棄され、再作成される理由は明らかです。私の場合、解決策は、グリッドのアイテムソースとして使用されるリストに常に4つのアイテムがあることを考えると、通常のグリッドを使用することでした。これは理想的ではなく、N項目リストの解決策ではありません..しかし、私の場合、ユーザーコントロールがデータをキャッシュするための初期化時に集中的なデータベースルックアップを実行したため、パフォーマンスが大幅に向上しました.

于 2013-02-20T07:13:45.847 に答える