2011-09-12 31 views
0

私はMEF/Prism複合WPFアプリケーションを使用しており、次のシナリオではビューを表示するのに問題があります。初めて私のビューが初めて自分の地域に注入されるのはなぜですか?

このアプリケーションには2つのウィンドウがあります。そのボタンがクリックされたときに、ボタンを備えたメインのスタートアップウィンドウが作成されて表示されます。子ウィンドウにはいくつかの領域があります。アプリケーションが起動すると、RegionManager.RegisterViewWithRegionを使って子ウィンドウのビューを登録します。

初めて、子ウィンドウが作成されて表示され、ビューが注入され、正常に動作します。しかし、子ウィンドウを閉じた後、メインウィンドウのボタンをクリックして、子ウィンドウの新しいインスタンスを作成して表示すると、ウィンドウは作成されますが、ビューは挿入されません。

RegionManagerが登録を失ったか、または2回目にその子ウィンドウ内の領域を見つけることができないかのようです。

なぜこのように動作しているのでしょうか?

ありがとうございます。

答えて

1

私は同じ問題を抱えていました(Unity/Prism 4)。これを解決するには、childwindowの領域からアクティブなビューを削除し、子ウィンドウ(OkButtonとCancelボタン)を閉じる前にregionManagerの領域を削除します。 それは良い解決策であるかどうかはわかりませんが、うまくいきます。 (私の領域は、子ウィンドウコンストラクタ上の領域マネージャに追加されます)

子ウィンドウコンストラクタ

this.regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 
RegionManager.SetRegionManager(this.ActionContent, this.regionManager); 
RegionManager.SetRegionName(this.ActionContent, REGION_NAME); 
this.regionManager.Regions[REGION_NAME].Add(this.sharedViewProperty.UIElement, 
this.sharedViewProperty.ViewName); 
this.regionManager.Regions[REGION_NAME].Activate(this.sharedViewProperty.UIElement); 

OKButton_Click

this.regionManager.Regions[REGION_NAME].Deactivate(this.sharedViewProperty.UIElement); 
this.regionManager.Regions.Remove(REGION_NAME); 

私はRegionManagerを設定したときに今、私は奇妙な行動を持っています私のコンストラクタ。 例外 "Microsoft.Practices.Prism.Regions.Behaviors.RegionCreationExceptionがあります:名前が 'ChildRegion'の領域を作成中に例外が発生しました。例外:System.ArgumentException:指定された名前のRegionが既に登録されている:"

域マネージャを設定する前に、私はこの次の行を挿入すると、それが動作:

this.regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 

int nbCountRegion = this.regionManager.Regions.Count(); 

RegionManager.SetRegionManager(this.ActionContent, this.regionManager); 
RegionManager.SetRegionName(this.ActionContent, REGION_NAME); 

理由を教えてはいけない、私はそれを説明することはできません...

関連する問題