提问人:Genna 提问时间:10/26/2019 更新时间:10/27/2019 访问量:600
c# wpf mvvm prism region引导程序中的 amanger 属性为 null
c# wpf mvvm prism regionamanger property is null in Bootstrapper
问:
我正在尝试创建一个新的 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();
}
答:
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
评论