1

私は Prism を初めて使用し、現在 Prism の「リージョン」の概念を使用して最初のアプリケーションを作成しています。現在Shell、別のモジュールで定義されたビューを表示する単一の領域を含むアプリケーションがあります。このビューには と の 2 つの独自の領域がSubregion1ありSubregion2、モジュールで定義された 2 つのビューを表示します。

これはすべて正しく機能しており、ビューとサブビューは適切な場所に表示されています。ただし、( を使用して) ビューまたはサブビューのビューモデルのいずれかでサブビューの 1 つを見つけようとするregionManager.Regions["Subregion1"];と、次のエラーが表示されます。

The region manager does not contain the SiteManager.SiteList region.

私は当初、これはIRegionManagers の複数のインスタンスを持つことの問題かもしれないと考えていましたが、私が読んだドキュメントのほとんどはIRegionManager、スコープIRegionManagerが特に要求されない限り、 のグローバル インスタンスが提供されることを示しています。

RegionManager.UpdateRegions()また、 staticとのさまざまな組み合わせを試しましたがRegionManager.SetRegionManager( .... )、役に立ちませんでした。

RegionManager問題なくこれらのリージョンにビューを登録できるにもかかわらず、私が要求しているリージョンを見つけることができない理由についてのアイデアはありますか?

編集:サブビューのビューモデルのコマンドで領域にアクセスしようとしています。

4

2 に答える 2

1

この例外が発生する理由は、まだ作成されていないビュー/ビューモデルのコンストラクターから領域にアクセスしようとしているためです。Loadedすでに初期化されているビューのイベントからアクセスしようとすることで、簡単に確認できます。

問題なくこれらのリージョンにビューを登録できるにもかかわらず、RegionManager が要求しているリージョンを見つけることができない理由についてのアイデアはありますか?

ビューをリージョンに登録する場合、リージョンを実際にロードする必要はありません。ビューを領域に登録すると、その情報がメモリに保存され、領域が作成されると (かなり後になる可能性があります)、Prism はその領域を適切なビューで初期化することを認識します。

于 2013-10-05T22:25:54.373 に答える