【问题标题】:Activating views in regions in Prism在 Prism 中激活区域中的视图
【发布时间】:2011-10-22 21:46:14
【问题描述】:

我有一些我似乎无法解决的问题。我创建了一个测试项目,使用 MEF 和 Prism4。我创建了一个测试项目,其中有 2 个视图,每个视图都在一个区域内注册,并且在另一个区域中还有一个按钮。单击按钮时,我希望将视图更改为正确的视图。我认为错误的代码如下,有人知道我在这里做错了什么吗?

    public void Initialize()
    {
        regionManager.RegisterViewWithRegion(RegionNames.MainRegion, typeof(Views.Module1View));

        Button button = new Button() { Content = "Module1" };
        button.Click += (o, i) =>
        {
            var region = this.regionManager.Regions[RegionNames.MainRegion];
            if (region != null)
            {
                region.Activate(typeof(Views.Module1View));
            }
        };

        regionManager.AddToRegion(RegionNames.NavigationRegion, button);
    }

我收到以下错误...

The region does not contain the specified view.
Parameter name: view

【问题讨论】:

    标签: c#-4.0 mef prism-4


    【解决方案1】:

    解决了 - 令人惊奇的是,睡个好觉会有什么好处!我必须从 ServiceLocator 获取视图。

        public void Initialize()
        {
            regionManager.RegisterViewWithRegion(RegionNames.MainRegion, () => 
                ServiceLocator.Current.GetInstance<Views.Module2View>());
    
            Button button = new Button() { Content = "Module2" };
            button.Click += (o, i) =>
            {
                var view = ServiceLocator.Current.GetInstance<Views.Module2View>();
    
                var region = this.regionManager.Regions[RegionNames.MainRegion];
                if (region != null)
                {
                    region.Activate(view);
                }             
            };
    
            regionManager.AddToRegion(RegionNames.NavigationRegion, button);
        }
    

    【讨论】:

    • 您不必从 ServiceLocator 获取视图。您也可以使用 region.GetView( regionName )
    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多