2014-02-16 66 views
4

我想創建一個具有動態視圖的區域(一個區域中有多個視圖)。區域內容需要通過ComboBox選擇事件進行更改(comobox項目是視圖實例)。我希望ComboBox中的更改將通過所選視圖項目更改區域中的視圖。註冊一個區域與在棱鏡中添加一個區域有什麼區別?

我的問題是什麼之間的區別:

MyView view= new MyView(); 
IRegion region = new Region(); 
region.Name="MyRegion"; 
regionManager.Regions.Add(region); 
region.Add(view); 
region.Activate(view); 

要:

regionManager.RegisterViewWithRegion("MyRegion",type(MyView)); 

什麼是使用動態區域的最佳方式?

+0

有人嗎?我真的需要解決它。我需要使用現有的視圖,而不是再次創建它們。這是我需要使用第一個程序的原因... – user436862

+0

重新使用視圖時要非常小心。單個視圖實例可能只在視覺樹中存在一次。你在使用MEF嗎? – Gusdor

回答

3

如果你想顯示在同一區域中的不同意見,你需要使用RequestNavigate或視圖注射,你已經在你的第一個方法使用

RegisterViewWithRegion將本地區與視圖相關聯,讓每一位定時控制區域所在的控件成爲可視化樹的一部分,視圖自動解析並顯示。

參見msdn條目以獲取更多信息

3

直接添加控制實例稱爲視圖注射。 註冊視圖類型被稱爲視圖發現

爲什麼發現?棱鏡使用當前的ServiceLocator抓取一個來自Container(MEF,Unity,無論您選擇)的實例。然後它自動添加視圖。

發現是因爲所有的意見都懶洋洋地創建(在需要時)更瘦。注射可以讓你做一些先進的成分(如範圍區域),但你必須更加實際操作。

沒有正確的答案,但對於學習棱鏡我會查看搜索(RegisterViewWithRegion)去。爲了獲得最佳效果,請使用常量來保存您的區域名稱!

1

您是不是使用容器來注入實例?根據我的理解,這兩個程序將如使用的容器用辛格爾頓登記的相關查看類型配置返回現有查看。你可以找到以下MSDN棱鏡指南章節的詳細信息:

對於這兩個實現,RegisterViewWithRegion()方法頗爲相似,第一個實現:它基本上負載和將容器中的視圖添加到區域中,並將其激活。所以最後的查看註冊在區域與此方法將是每個初始化完成後的活動之一。您可以在PrismLibrary解決方案上檢查此行爲。

就像Jimmy說的那樣,您描述的代碼僅用於加載每個區域以及相應的視圖。然後,你可以使用RequestNavigate()以激活選定查看已經登記在地區方法。

你可以找到更多的相關信息在以下MSDN棱鏡指南章:

我希望這有助於,問候。