簡體   English   中英

Prism-從松散耦合的組件中注入視圖

[英]Prism - Inject view from loosely-coupled assembly

我試圖為以下情況找到答案,但未能給出答案。 我自己承認,這很可能是由於我尚未完全掌握整個棱鏡概念。 為了辯護,我僅在兩天前才開始調查Prism,所以請保持謹慎...

閱讀大量文獻后,我將進行以下設置:

  1. 框架項目
  2. 殼牌項目
  3. MainMenu項目(模塊)
  4. SideMenu項目(模塊)
  5. StatusBar項目(模塊)
  6. TestContentA項目(模塊)
  7. TestContentB項目(模塊)

框架項目除其他外,還包含事件定義和有效負載。

Shell項目在shell.xaml中具有四個區域:

  • MainMenuRegion
  • SideBarRegion
  • StatusBarRegion
  • ContentRegion

每個非Shell項目都引用了以下Prism程序集:

  • Microsoft.Practices.Prism
  • Microsoft.Practices.ServiceLocation
  • Microsoft.Practices.Unity

Shell項目除了這些程序集之外,還引用了:

  • Microsoft.Practices.Prism.UnityExtensions

每個項目都引用了Framework項目,但是沒有一個引用解決方案中的任何其他項目。

在這一點上,我想指出一切都按計划進行!

在MainMenuView項目中,我有一些MenuItems,這些菜單項在MainMenuViewModel中具有命令。

ViewEvent使用EventAggregator,發布在Framework項目中聲明的幾個Event。

在Shell項目中,ShellViewModel訂閱以下事件,例如:

使用ContentControl作為“ ContentRegion”的控件,我可以毫無問題地在TestContentA和TestContentB之間切換。 目前,TestContentA和TestContentB都使用

.RegisterViewWithRegion method(...)

我想做的是將TestContentA和TestContentB作為新的TabItem注入到TabControl中,而不是注入到ContentControl控件中。

因此,shell.xaml現在包含一個TabControl以及一個名為“ TabRegion”的進一步區域。 然后,我再次通過使用將注冊的Region從ContentRegion更改為TabRegion

.RegisterViewWithRegion(...)

方法。

我看過很多例子,例如:

IRegion tabRegion = regionManager.Regions["TabRegion"];
var tabView1 = container.Resolve();
tabRegion.Add(tabView1, "FirstTabView");

我在ShellViewModel中沒有容器,但是即使在這里沒有容器,我仍然不能引用TestContentA視圖,因為它位於另一個程序集中,而該程序集本身將在運行時找到。

與您可以在網上找到的示例不同,要注入的視圖始終似乎在示例項目中。

在Navigate方法中,如果我(出於調試目的)添加代碼:

var tabRegion = regionManager.Regions["TabRegion"];

然后我可以看到tabRegion有一個View集合,並且在此視圖中,我可以看到來自TestContentA和TestContentB的兩個視圖,告訴我這些視圖已正確注冊。 問題是我不知道如何“抓住”它們,以便可以將視圖的新實例作為TabItem注入。

如果我作弊並添加對TestContentA的引用,則只需添加視圖,TabItem就會出現。 這也告訴我,我快到了,但是當然不希望引用。

綜上所述,我的問題是:

我如何從應用程序啟動時發現的松耦合組件中注入視圖?

如果有人可以指出正確的方向,我將不勝感激,因為我相信這是可以做到的。

感謝您抽出時間來閱讀!

您將需要創建一個引導程序。 每個加載的模塊都可以通過ServiceLocator獲取區域管理器,然后將其視圖注冊到區域名稱。 這樣,Shell項目就不需要直接引用您的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM