"ActiveModule"という名前の領域があり、別のビューで再利用したいと思っています。たとえば、検索ボタンを押してそこに検索ビューを表示します。プリズムは同じ領域のビュー間で切り替える
ATMで行うことができる唯一の方法は、その地域のすべてのアクティブなビューを非アクティブにしてから、好きなビューをアクティブにすることです。これはちょっと汚いですか、「ビューマネージャ」などありますか?
"ActiveModule"という名前の領域があり、別のビューで再利用したいと思っています。たとえば、検索ボタンを押してそこに検索ビューを表示します。プリズムは同じ領域のビュー間で切り替える
ATMで行うことができる唯一の方法は、その地域のすべてのアクティブなビューを非アクティブにしてから、好きなビューをアクティブにすることです。これはちょっと汚いですか、「ビューマネージャ」などありますか?
リージョンがContentControlである場合、またはContentControlから派生している場合は、一度にアクティブなビューが1つしか存在できず、そのリージョンの検索ビューをアクティブ化する必要があります。
IRegionManager
を使用している場合は、自分が認識しているタイプのビューをすべて削除してから追加することができます。
foreach (var view in _regionsManager.Regions["MyRegion"].Views.ToArray())
{
if (view is MyType ||
view is MyOtherType)
_regionsManager.Regions["MyRegion"].Remove(view);
}
_regionsManager.AddToRegion("MyRegion", typeof(MyView));
これは決して理想的ではありませんが、機能します。 :)
私が知っている限り、あなたがやっていることは理論的にはSCSFで最も上のビューがフレームワークによって活性化された唯一の方法です。これを実現するには、独自のViewManagerまたは同等のShowViewServiceを作成することができます。事実、私が何をしたのか?
複数のビューを表示できるcontentControlのタイプを使用することを検討しましたか? たとえば、あなたはこのようにTabControlのを使用することができます。
<TabControl Name="MainRegion" Regions:RegionManager.RegionName="MainRegion"/>
あなたは今、地域に複数のビューを追加することができます。 PrismのINavigationAware
とIActiveAware
のインタフェースを使用して、ビュー上でナビゲーションを実行する(アクティブにする、正しいビューを見つけるなど)。
あなたの枠組みを打ち出していますが、ナビゲーション関連のフレームワークを使用している場合、あなたは、単に地域の他のビューを非アクティブ化の世話をする
regionManager.RequestNavigate(RegionNames.MainContentRegion, new Uri("your target view" + parameters, UriKind.Relative));
上記の行を呼び出すことができますかわかりません。ビューの発見やビューの注入を行う場合
そうでなければ、アプローチを使用することができますhere