[英]With Prism, how can I inject a scoped RegionManager into a service?
我正在開發一個Prism應用程序,它包含一個包含幾個子區域的TabControl
。 因此,我根據Brian Lagunas在他的PluralSight課程中描述的模式實現了一個自定義RegionBehavior,該課程在https://app.pluralsight.com/library/courses/prism-mastering-tabcontrol/上找到並注入一個自定義的RegionNavigationContentLoader也在上述課程,以確保我沒有異常,並可以在我的TabControl的幾個選項卡上具有相同名稱的區域。
對於那些無法訪問PluralSight的人:
我實現了一個監視區域的Views-collection的行為,並且當它發生更改時,檢查添加的視圖或其DataContext是否實現了特定的接口。 如果檢測到此接口,則會將作用域RegionManager設置為該接口的屬性,因此進入作用域區域的所有視圖都可以知道其作用域RegionManager。
但是,我也有一些服務需要這個作用域RegionManager才能導航到我的TabControl中的子區域。
由於我在容器中創建此服務,因此它會獲取注入的全局RegionManager而不是作用域。
我的問題是:
更新
您可以在下面找到我的應用程序的計划結構。 我希望它能說明為什么我要從服務中導航到作用域區域:
該應用程序包含一個已提到的TabControl
,其中每個TabItems都包含一個分析 。
分析總是由選定的可視化組成,可以在右上方的框中選擇。 當選擇可視化時,它在服務中被激活,該服務主要調用代碼來生成可視化,檢查設置的有效性等。
然后,可視化應顯示在VisualisationRegion中,特定於可視化的設置應顯示在SettingsRegion中。
我的計划是從服務中導航到這兩個區域。
由於無法預先生成可視化(在顯示之前必須始終執行檢查,因此無法直接從視圖/視圖模型導航。即使可能,顯示所有可視化類型的視圖也不知道作用域RegionManager,因為它是一個組合視圖的一部分(父視圖是知道的,當然可以將作用域RegionManager注入其子視圖,但在我看來,這似乎是一個代碼氣味)
這種類型的應用程序可能不適合Prism導航方法,或者您是否知道如何重構我的應用程序以更好地適應Prism?
您無法將范圍區域管理器注入您的服務。 哎呀,你甚至無法將一個范圍區域管理器注入Viewmodel,這就是為什么你需要自定義行為來獲取它的原因。
更新:我將可視化類型作為主選項卡視圖的一部分。 我認為沒有任何理由說這應該是一個單獨的地區。 現在,您將可以訪問作用域區域管理器,現在可以將視圖導航到VisualizationRegion。 該服務應該不了解區域經理。 只需響應可視化類型選擇更改,調用所需服務,獲取結果並進行相應導航。
除了Brians的回答,如果你真的需要在你的ScopedRegionManager上執行邏輯,我會推薦兩種方法。
_
public static IRegionManager NavigateView(this IRegionManager regionManager, string regionName, string view, NavigationParameters parameters = null)
{
var navigationUri = new Uri(view, UriKind.Relative);
regionManager.RequestNavigate(regionName, navigationUri, parameters);
return regionManager;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.