2014-02-07 20 views
1

我有一個相當大的棱鏡應用程序,並試圖應用新功能。該功能是串口參數選擇。範圍內的區域和查看發現

我想刷新串行端口名稱列表,當我的viewmodel的IsActive屬性設置爲true。在樣本中愉快地實現了這一點,但現實是......不同。

我修改的視圖包含在包含在父區域(標記爲"PageRegion")的ItemsControl(標記爲"SettingsRegion")中。設置區域包含來自其他模塊的設置視圖。

我想爲此使用SyncActiveAwareAttribute,但它需要有作用域的區域。

我需要在這裏使用視圖注入(regionmanager.Regions["blahblah"].Add(....)還是使用視圖發現(regionManager.RegisterWithRegion(...)可以讓它工作?

如果我必須使用注射...

考慮到其他模塊需要以作用域IRegionManager實例的引用注入了自己的看法:

  1. 如何纔是最好的如何讓區域經理進入其他模塊?
  2. 何時應該進行注射以確保該區域存在?
  3. 我可以混合搭配注射與發現嗎?我想避免一個大的重構。

回答

3

爲了創建作用域,您需要使用視圖注入。相關信息可在下列MSDN棱鏡章#7鏈接找到:

作用域區經理通過設置createScopeRegionManager超載參數返回as true on Reg ion.Add()方法。你將執行在同一個地方這個動作,你通常會添加或註冊查看地區像對應模塊的初始化()方法:

IRegionManager scopedRegionManager = scopedRegion.Add(view, null, createScopeRegionManager); 

然後,一個共享的可能途徑scopedRegionManager到其他模塊。將發佈()scopedRegionManager作爲參數的事件。但是,您應該注意模塊依賴性和模塊實例化順序。 另一種方法是將scopedRegionManager存儲爲例如字典。您可以在以下CodePlex上線程找到更多的相關信息:使用查看發現其他查看註冊

它不應該有任何問題,不會造成作用域

我希望這對你有所幫助,

問候。