2014-12-04 61 views
0

我目前沒有可用的代碼,所以我會盡量保持描述性。PRISM MEF創建和使用新的RegionManager

我有一個帶有菜單的shell窗口。這個菜單有一個菜單項,它打開一個帶有shell窗口的新模式對話窗口,因爲它是父窗口。我正在使用自定義交互請求和觸發器操作來打開對話窗口。自定義INotification事件的Content屬性需要一個視圖(在這種情況下,它是一個窗口控件),視圖本身將IRegionManager作爲構造函數。

[Import] 
public IRegionManager { get; set; } 

...{ Content = new DialogWindowView(regionManager.CreateRegionManager()) } 

然後,當操作是從殼牌稱爲查看它從內容屬性窗口的引用,並調用content.ShowDialog()

然後在彈出的窗口的構造函數,我加入了一些意見,對話窗口的區域。

public IRegionManager RegionManager { get; set; } 
public DialogWindowView(IRegionManager regionManager) 
{ 
    this.RegionManager = regionManager; 

    RegionManager.RegisterViewWithRegion("region1", typeof(view1)); 
    RegionManager.RegisterViewWithRegion("region2", typeof(view2)); 
    RegionManager.RegisterViewWithRegion("region3", typeof(view3)); 
} 

在對話窗口中的觀點,我結合了區域對話窗口的區域經理,像這樣:

<ContentControl 
    prism:RegionManager.RegionManager="{Binding RegionManager, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" 
    prism:RegionManager.RegionName="region1"/> 

對話窗口加載並顯示在它的區域的觀點,但是當我關閉對話窗口並嘗試再次打開它失敗,說它不能將視圖添加到區域,因爲它們已經存在。我不知道這怎麼可能,因爲每次我打開一個對話框時,我都會在對話框中調用new(所以它應該是一個新對話框),並且我傳入一個全新的區域管理器(它應該沒有視圖與之相關)。我試過手動刪除窗口關閉事件的視圖,它似乎刪除它們,但然後對話框仍然不會重新打開,它不能創建視圖的錯誤。

我該如何正確打開一個新的對話框窗口與它自己的作用域區域管理器,以便我可以關閉它並重新打開它?

+0

是否需要其他信息? – 2014-12-08 15:58:32

回答

0

我將視圖發現更改爲視圖注入,並移動了將視圖添加到區域的代碼,從構造函數到加載的事件。

RegionManager.Regions["region"].Add(ServiceLocator.Current.GetInstance<view>()); 

沒有做一些更多的研究,我不是100%肯定這兩種方法的區別,但它的工作現在,這樣讓我很開心。