Silverlight 5、Prism 4.1、MEF を使用。
インターフェイスによってエクスポートされるビューがあります。
サンプル:
[Export(typeof(IUploadListView)), PartCreationPolicy(CreationPolicy.NonShared)]
public partial class UploadListView : RadWindow, IUploadListView
{
}
このビューを2回再利用したいモデル(メインメニューモデルとしましょう)があります。ビューの各インスタンスは、1 回だけ呼び出して表示する必要があります。動作が変わるように、下にあるビューモデルの UploadType を変更します。
サンプル:
var view = this.serviceLocator.GetInstance<IUploadListView>();
view.UploadListViewModel.UploadType = UploadType.MyType1;
view.Show();
その他のメニュー オプション:
var view = this.serviceLocator.GetInstance<IUploadListView>();
view.UploadListViewModel.UploadType = UploadType.MyType2;
view.Show();
問題はこれです:
- NonShared ポリシーを使用すると、一意のインスタンスが表示可能になります。問題は、ユーザーが同じメニュー項目を押すと、インスタンスが 2 回 (またはそれ以上) 表示されることです。
- 共有ポリシーを使用する場合、最初のビューが表示されると、2 番目のメニュー項目は最初のビューを再利用するため、1 つのビューのみが表示されます。
私が望むのは、IUploadListView 型のインスタンスが表示されているかどうかを確認できる必要があることです。その場合は、インスタンスを再利用して Show() を呼び出すだけです。インスタンスが見つからない場合は、MEF に (サービス ロケーターを使用して) インスタンスを作成してもらいます。
これを達成する方法はありますか?