新しいビューがいつ作成され、既存のビューがいつ表示されるかを制御しようとしています。
これは、Prismドキュメントの「既存のビューへの移動」セクションで概説されているシナリオと非常によく似ていますが、完全に機能させることはできません:http: //msdn.microsoft.com/en-us/library/gg430861 (v = pandp.40).aspx
okで始まるビュー/ビューモデルを作成できることがわかりましたが、その後、その新しいインスタンスを作成できません。つまり、一度に複数のインスタンスが存在するようにしたいのです。
ビューモデルの例を次に示します。
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class DataEntryPageViewModel : INavigationAware, IRegionMemberLifetime
{
private Guid id;
[ImportingConstructor]
public DataEntryPageViewModel()
{
id = Guid.NewGuid();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
// In actual fact there would be more logic here to determine
// whether this should be shown to the user
return false;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
}
public bool KeepAlive
{
// For the purposes of this example we don't want the view or the viewModel
// to be disposed of.
get { return true; }
}
}
私は次のようにこれにナビゲートしています:
m_RegionManager.RequestNavigate(
"MainRegion",
new Uri("/DataEntryPageView", UriKind.Relative));
したがって、最初に上記を呼び出すと、ビューが表示されます。
次にRequestNavigateを呼び出すと、IsNavigationTargetがヒットし、falseが返されます。次に、新しいインスタンスを作成することを望んでいますが、それは実現しません。コンストラクターがヒットせず、UIが更新されてビューの新しいインスタンスが表示されないため、これが発生していないことはわかっています。
新しいインスタンスを作成する方法はありますか?
どうもありがとう、
ポール
編集
(同じビューの別のインスタンスを要求するために)2回目にRequestNavigateを呼び出すと、コールバックが「ビューはすでにリージョンに存在します」というエラーを報告することに気付きました。したがって、リージョン内に異なるビューの複数のインスタンスを持つことはできますが、同じビューの複数のインスタンスを持つことはできないようです。私の理解はあまり良くないので、間違っている可能性があります。