「ActiveModule」という名前のリージョンがあり、別のビューで再利用したいと考えています。たとえば、検索ボタンを押して、そこに検索ビューを表示するなどです。
私がATMでできる唯一の方法は、その地域のすべてのアクティブなビューを非アクティブにしてから、好きなビューをアクティブにすることです。これは少し汚いですが、「viewManager」などを使用できますか?
「ActiveModule」という名前のリージョンがあり、別のビューで再利用したいと考えています。たとえば、検索ボタンを押して、そこに検索ビューを表示するなどです。
私がATMでできる唯一の方法は、その地域のすべてのアクティブなビューを非アクティブにしてから、好きなビューをアクティブにすることです。これは少し汚いですが、「viewManager」などを使用できますか?
リージョンが ContentControl であるか、ContentControl から派生している場合、アクティブなビューは一度に 1 つしか存在できず、そのリージョンで検索ビューをアクティブにするだけで済みます。
複数のビューを表示できるタイプの contentControl を使用することを検討しましたか? たとえば、次のように TabControl を使用できます。
<TabControl Name="MainRegion" Regions:RegionManager.RegionName="MainRegion"/>
リージョンに複数のビューを追加できるようになりました。Prism のインターフェイスを使用INavigationAware
しIActiveAware
て、ビューでナビゲーションを実行できるようにします (ビューをアクティブにする、正しいビューを見つけるなど)。
私の知る限り、あなたがしていることは唯一の方法です。理論的には、SCSF では最上位のビューがフレームワークによってアクティブ化されました。これを行うには、独自のViewManagerまたは同等のShowViewServiceを作成できます。実際のところ、それは私がやったことです!
を使用している場合は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));
決して理想的ではありませんが、機能します。:)