在 Prism 中激活区域中的视图

发布于 2024-12-11 16:12:46 字数 816 浏览 0 评论 0原文

我有一个似乎无法解决的问题。我使用 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

I have problem that I don't seem to be able to solve. I have a created a test project, using MEF and Prism4. I've created a test project where I have 2 views and each of them register themselves inside a region, and also a button in another region. When the button is clicked, I want the view of change to the correct view. The code I think is wrong is below, anyone have any ideas what I am doing wrong here ?

    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);
    }

I get the following error ...

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

森罗 2024-12-18 16:12:46

解决了这个问题 - 令人惊奇的是,睡个好觉会带来什么!我必须从 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);
    }

Solved it - amazing what a good nights sleep will do! I had to get the view from the 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);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文