[英]Prism : Change the active view
我有一個類似於Windows控制面板的小工具。 該工具使我們可以管理用戶,配置數據庫,管理腳本等。主頁顯示了應用程序的所有子類別。 單擊鏈接時,它將在右側面板中加載該類別的視圖,而左側的小面板顯示可用於該類別的任務。 簡單。
基本上,我想做的是擁有一個“上下文化”的狀態欄。 如果在需要連接的視圖中,狀態欄應顯示您的狀態。 如果您處於應該顯示信息的視圖中,則希望在狀態欄中顯示它。
我已經在外殼程序中放置了一個Region
(狀態欄名為StatusBarRegion 。對於每個模塊,我都在外殼程序的區域中注冊了該模塊的StatusBarView。
現在,我想處理上下文的更改。 時間到了,我需要激活好視圖。
但是每次我嘗試解析StatusBarRegion時 ,都無法在區域管理器的區域中找到它。
看到,
var region = _regionManager.Regions[.RegionNames.StatusBarRegion];
region.Activate(_container.Resolve<StatusBarView>());
該區域始終為空。 為什么 ?
謝謝你的時間。
我相信您的錯誤與
region.Activate(_container.Resolve<StatusBarView>());
並不是
var region = _regionManager.Regions[.RegionNames.StatusBarRegion];
關於這可能是您的問題的原因有很多,我將為您提供可以嘗試的解決方案。
首先 , region.Activate()
要求該視圖實例已經存在於該區域中。 因此,從您的代碼中,我懷疑_container.Resolve<StatusBarView>()
正在為您提供StatusBarView
的新實例,因此該區域中將不存在該實例。
解決方案:向容器注冊StatusBarView
時,請考慮單例視圖。
_container.RegisterType<IStatusBarView,StatusBarView>
(new ContainerControlledLifetimeManager())
其次 ,必須先將視圖類型注冊(或手動添加)到區域,然后才能激活它。
解:
_regionManager.RegisterViewWithRegion
(RegionNames.StatusBarRegion, typeof(IStatusBarView));
或者:
_regionManager.Regions[RegionNames.StatusBarRegion]
.Add(_container.Resolve<StatusBarView>());
仔細檢查RegionNames.StatusBarRegion
值(如果已與您的Shell中的區域目標相同)。
如果是這樣,我想region不應為null,除非您將句柄放在模塊的view / viewmodel中,並且沒有在構造函數上使用region manager和container。
假設它在您的視圖SilverlightUserControl1
了處理。 構造函數可能是這樣的:
private readonly IRegionManager _regionManager;
private readonly IUnityContainer _container;
public SilverlightUserControl1(IRegionManager regionManager, IUnityContainer container)
{
_regionManager = regionManager;
_container = container;
}
private Button1_Click(object sender, RoutedEventArgs e)
{
var statusBarView = _container.Resolve<StatusBarView>();
statusBarRegion = _regionManager.Regions["StatusBarRegion"];
statusBarRegion.Add(statusBarView, "StatusBarView");
statusBarRegion.Activate(statusBarView);
// or you could remove all views in `ActiveViews` and add the view then
// (no need to activate)
}
該區域為空的原因? 這段代碼在Module的Initialize方法中,因此尚未創建UI。
對於管理狀態欄的最佳方法,我仍然想知道如何去做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.