首页 > 解决方案 > Prism Parent TabControl 子区域

问题描述

试图TabControl在另一个区域内创建一个区域。有TabControl一组Views将被添加到其中,并带有各自的ViewModels.

但是要么View不显示,要么tabitemView显示一个,要么我收到以下错误:

System.ArgumentException: 'This RegionManager does not contain a Region with the name 'ParentTabRegion'. (Parameter 'regionName')'

主菜单视图:

<Grid>
    <ContentControl prism:RegionManager.RegionName="ContentRegion" />
</Grid>

主菜单视图模型:

public class MainMenuViewModel : BindableBase
{
    private readonly IRegionManager _regionManger;

    public MainMenuViewModel(IRegionManager regionManager)
    {
        _regionManger = regionManager;

        _regionManger.RequestNavigate("ContentRegion", "ParentView");

    }
}

父视图:

<Grid>
    <TabControl prism:RegionManager.RegionName="ParentTabRegion" />
</Grid>

父视图模型:

public class ParentViewModel : BindableBase
{
    private readonly IRegionManager _regionManger;

    private Child1View _tab1 = new Child1View();
    private Child1View Tab1
    {
        get { return _tab1; }
        set { SetProperty(ref _tab1, value); }
    }
    private Child2View _tab2 = new Child2View();
    private Child2View Tab2
    {
        get { return _tab2; }
        set { SetProperty(ref _tab2, value); }
    }

    public ParentViewModel(IRegionManager regionManger)
    {
        _regionManger = regionManger;

        // Gives 'This RegionManager does not contain a Region with the name 'GeneralDataTabRegion'. (Parameter 'regionName')' error
        _regionManger.AddToRegion("ParentTabRegion", typeof(Child1View));
        _regionManger.AddToRegion("ParentTabRegion", typeof(Child2View));

        //I've also tried the following
        
        // Same error as above
        // _regionManger.Regions["ParentTabRegion"].Add(typeof(Tab1View));
        // _regionManger.Regions["ParentTabRegion"].Add(typeof(Tab2View));

        // Same error as above
        // _regionManger.AddToRegion("ParentTabRegion", Tab1);
        // _regionManger.AddToRegion("ParentTabRegion", Tab2);

        // Only the last registered view is displayed
        // _regionManger.RegisterViewWithRegion("ParentTabRegion", typeof(Tab1));
        // _regionManger.RegisterViewWithRegion("ParentTabRegion", typeof(Tab2));
    }
}

我在所有视图中也有 prism 命名空间:

xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"

也许我没有以ParentTabRegion某种方式注册?但我不必注册其他地区,它们似乎开箱即用。

让我知道您是否知道我做错了什么,或者我是否缺少某些东西。谢谢你。

标签: c#wpfmvvmprismtabcontrol

解决方案


我只想发表评论,但由于声誉低下而不能发表评论。反正..

在使用嵌套视图时检查这篇文章 Prism 7 throws and exception

正如评论中所述:“问题在于如何在 ViewModel 中注入作用域区域”Brian 的这段视频应该可以帮助您解决这个问题。

https://app.pluralsight.com/library/courses/prism-mastering-tabcontrol


推荐阅读