5

我有一个类似于 Windows 控制面板的小工具。该工具允许我们管理用户、配置数据库、管理脚本等。主页呈现应用程序的所有子类别。当您单击一个链接时,它会在右侧面板中加载该类别的视图,并且左侧的一个小面板显示该类别可用的任务。简单的。

基本上,我想做的是有一个“上下文化”的状态栏。如果您处于需要连接的视图中,状态栏应显示您的状态。如果您在应该显示信息的视图中,我希望它在我的状态栏中。

我已经在我的 shell 中为状态栏放置了一个Region(命名为StatusBarRegion。对于每个模块,我在 shell 的区域上注册了该模块的 StatusBarView。

现在,我想处理上下文的变化。我需要在适当的时候激活好视野。

但是每次我尝试解析StatusBarRegion时,在区域管理器的区域中都找不到它。

看,

var region = _regionManager.Regions[.RegionNames.StatusBarRegion];
region.Activate(_container.Resolve<StatusBarView>());

该区域始终为空。为什么 ?

谢谢你的时间。

4

4 回答 4

3

我相信你的错误与

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>());
于 2010-12-16T23:22:54.050 回答
1

仔细检查RegionNames.StatusBarRegion值是否与您的外壳中的区域目标相同。

如果是这样,我认为 region 不应该为空,除非您将句柄放在模块的视图/视图模型中,并且您没有在构造函数上获得区域管理器和容器。

假设它在您看来已处理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)
}
于 2010-06-03T13:59:27.420 回答
1

不久前我也遇到过类似的问题。我在这里发布了一个问题,但后来发现了问题及其解决方案。

我的问题是我的区域没有在Shell. 在此处查看完整的问题和答案

我希望这有帮助。

于 2011-03-30T12:55:54.300 回答
0

该区域为空的原因是什么?这段代码在Module的Initialize方法中,所以还没有创建 UI。

对于管理我的状态栏的最佳方式,我仍然想知道我将如何去做。

于 2010-05-27T20:15:54.557 回答