c# wpf mvvm prism region引导程序中的 amanger 属性为 null

c# wpf mvvm prism regionamanger property is null in Bootstrapper

提问人:Genna 提问时间:10/26/2019 更新时间:10/27/2019 访问量:600

问:

我正在尝试创建一个新的 WPF MVVM 棱镜项目,但是当我尝试在 shell 中向我的区域添加视图时,RegionManager 属性存在空引用异常。谁能帮我? 这是我的代码:

 class Bootstrapper : UnityBootstrapper
    {
        public IRegionManager regionManager { get; set; }
        public IRegionManager RegionManager
        {
            get
            {
                return regionManager;
            }
            set
            {
                regionManager = value;
            }
        }

        protected override DependencyObject CreateShell()
        {
            return new Shell();
        }

        protected override void InitializeShell()
        {
            base.InitializeShell();
            App.Current.MainWindow = (Window)this.Shell;
            App.Current.MainWindow.Show();
            this.RegionManager.RequestNavigate("MainRegion", new Uri("PartNumberView", UriKind.Relative));
        }

        protected override void ConfigureModuleCatalog()
        {
            base.ConfigureModuleCatalog();
        }
    }

壳体 XAML:

<Window x:Class="MechanicsPriceComparer.Shell"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:prism="http://www.codeplex.com/prism"
        xmlns:local="clr-namespace:MechanicsPriceComparer"
        mc:Ignorable="d"
        Title="MechanicPriceComparer" Height="450" Width="800">
    <Grid>
        <ItemsControl Name="NameOfMainRegion" prism:RegionManager.RegionName="MainRegion" ></ItemsControl>
    </Grid>
</Window>

app.xaml:

protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            Bootstrapper bootstrapper = new Bootstrapper();
            bootstrapper.Run();
        }
WPF MVVM PRISM NULLREFERENCEEXCEPTION 区域

评论


答:

0赞 Florin Bratan 10/27/2019 #1

在使用 RegionManager 属性之前,需要对其进行初始化。

代码示例:

protected override void InitializeShell()
{
    base.InitializeShell();
    App.Current.MainWindow = (Window)this.Shell;
    App.Current.MainWindow.Show();

    RegionManager = Prism.Regions.RegionManager.GetRegionManager(Application.Current.MainWindow);

    this.RegionManager.RequestNavigate("MainRegion", new Uri("PartNumberView", UriKind.Relative));
}

评论

0赞 Genna 10/27/2019
嗨,谢谢你的评论,它有帮助。但现在它重新定义了系统。对象而不是视图本身。我可能会告诉你,我不使用模块,而只是从 mvvm 模型表单项目本身查看。你能帮我吗?我尝试使用,但没有帮助Container.RegisterTypeForNavigation<Object, PartNumberView>("PartNumberView");
0赞 Haukinger 10/27/2019
InitializeShell现在开始还为时过早,不如去结束。在那里,您应该在容器中找到有效的区域管理器。InitializeModules