6

私はdatatemplateを使用して、PRISM4ディスカバリーを使用してビューをロードしています。既存のインスタンスを再利用するのではなく、ビュー/ビューモデルを複数回作成する必要があるため、リソースにx:Shared = falseを設定しましたが、ビューモデルにのみ影響します。ビューモデルが再利用されていないことは確認できますが、ビューは再利用されています。ビューコンストラクターは、最初に呼び出されたときに1回だけ呼び出されます。私はここで同様の投稿を読みましたが、それらの解決策は私にはうまくいきませんでした。リソースローダー/ロケーターを拡張して、共有フラグを尊重するようにする方法があるかどうかを知りたいです。

テンプレートの定義方法は次のとおりです。

 <DataTemplate DataType="{x:Type CVM:MyViewModel}" x:Shared="False">
        <V:MyView />
 </DataTemplate>
4

1 に答える 1

0

DataTemplate含まれているのは、'Template'オブジェクト(この場合はビューモデル)が表示されるときに必要なビジュアルツリーを作成するためのものです。

したがって、'MyViewModel'オブジェクトの1つだけが表示されている場合、ビューのコンストラクターは1回だけ呼び出されます(複数のViewmodelがインスタンス化されている場合でも)。DataTemplateビューに複数のビューモデルがある場合、テンプレートが適切に構築されてビジュアルツリーに追加されると(ビューモデルごとに1回)、ビューのコンストラクターが複数回呼び出されます。

ただし、ItemsControl(ビューモデルを保持する)仮想化がオンになっている場合は、1つの「コンテナ」(簡略化するとデータテンプレートになります)のみが存在し、再利用できます。

于 2012-06-01T12:26:35.170 に答える