簡體   English   中英

棱鏡:更改活動視圖

[英]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)
}

我前一段時間也遇到過類似的問題。 我在這里發布了一個問題,但是后來發現了問題及其解決方案。

我的問題是我的區域沒有在Shell定義。 在此處查看完整的問題並回答

我希望這有幫助。

該區域為空的原因? 這段代碼在ModuleInitialize方法中,因此尚未創建UI。

對於管理狀態欄的最佳方法,我仍然想知道如何去做。

暫無
暫無

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

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