2012-05-31 17 views
5

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

は私のテンプレートが定義されている方法です。

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

デザインを変更する必要はありませんか? – DotnetEng

+0

プリズムを使わず、エレガントなものを本当に考えることができません。 –

+0

Prismでは、 'PartCreationPolicy'属性を使ってシングルトンを使用するかどうかを制御します。 'Shared' =シングルトン、' NonShared' =新しいインスタンス。あなたは '[PartCreationPolicy(CreationPolicy.NonShared)]'であなたの意見を飾ったことがありますか? –

答えて

0

すべてDataTemplateが含まれているオブジェクト(あなたのケースでのviewmodel)が見えてくるときに必要なビジュアルツリーを作成するための'Template'です。

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

ItemsControl(あなたのビューモデルを保持している)が仮想化を有効にしている場合は、単純に「コンテナ」(単純化してデータテンプレートとなります)が存在する可能性があります。

関連する問題