如何在 Prism WPF C# 中加载默认视图
How to load default view in Prism WPF C#
我正在使用这个 Repo:
https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/17-BasicRegionNavigation
有效,但我需要进行更改:
当 运行 应用程序时,我必须单击选定的视图才能加载,因此我需要显示默认视图。
点击后
Bootstrapper.cs
文件代码:
using Microsoft.Practices.Unity;
using Prism.Unity;
using NavigationParticipation.Views;
using System.Windows;
using Prism.Modularity;
using ModuleA;
namespace NavigationParticipation
{
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void ConfigureModuleCatalog()
{
var catalog = (ModuleCatalog)ModuleCatalog;
catalog.AddModule(typeof(ModuleAModule));
}
}
}
文件夹结构(解)
以及如何在初始化 MainWindow 之前显示登录 window 或另一个 window?
我解决了一部分问题:
将此代码添加到 :
17-BasicRegionNavigation/ModuleA/ModuleAModule.cs
此代码:
_regionManager.RequestNavigate("ContentRegion", new Uri("ViewA", UriKind.Relative));
其中:ViewA
对应于您要显示的目标视图。
ContentRegion
对应于您的 MainRegion,您可以在 :
中找到它
17-BasicRegionNavigation/BasicRegionNavigation/ViewModels/MainWindowViewModel.cs
看起来像:
using Microsoft.Practices.Unity;
using ModuleA.Views;
using Prism.Modularity;
using Prism.Regions;
using Prism.Unity;
using System;
namespace ModuleA
{
public class ModuleAModule : IModule
{
IRegionManager _regionManager;
IUnityContainer _container;
public ModuleAModule(RegionManager regionManager, IUnityContainer container)
{
_regionManager = regionManager;
_container = container;
}
public void Initialize()
{
_container.RegisterTypeForNavigation<ViewA>();
_container.RegisterTypeForNavigation<ViewB>();
_regionManager.RequestNavigate("ContentRegion", new Uri("ViewA", UriKind.Relative));
}
}
}
现在如何在 MainWindow 初始化之前添加登录 Window ??
其中一种方法是在模块外部的某处添加 CompositeCommand,以便它们都可以使用它...
public class ApplicationCommands
{
public static CompositeCommand NavigateCommand = new CompositeCommand();
}
然后如果你想让 ViewA 成为默认值
在 ModuleAModule 的 Initialize() 方法中添加
ApplicationCommands.NavigateCommand.Execute(typeof(ViewA));
如果您希望 ViewB 成为默认值,则在 ModuleBModule 的 Initialize() 方法中添加
ApplicationCommands.NavigateCommand.Execute(typeof(ViewB));
还有更多方法,但不知道您的逻辑和使用的所有代码,所以这个似乎是最简单的方法。
如果您正在使用 IRegionManager
,那么您可以这样做。
_regionManager.RegisterViewWithRegion("YourRegionName", typeof(ViewA));
我正在使用这个 Repo: https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/17-BasicRegionNavigation
有效,但我需要进行更改:
当 运行 应用程序时,我必须单击选定的视图才能加载,因此我需要显示默认视图。
点击后
Bootstrapper.cs
文件代码:
using Microsoft.Practices.Unity;
using Prism.Unity;
using NavigationParticipation.Views;
using System.Windows;
using Prism.Modularity;
using ModuleA;
namespace NavigationParticipation
{
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void ConfigureModuleCatalog()
{
var catalog = (ModuleCatalog)ModuleCatalog;
catalog.AddModule(typeof(ModuleAModule));
}
}
}
文件夹结构(解)
以及如何在初始化 MainWindow 之前显示登录 window 或另一个 window?
我解决了一部分问题:
将此代码添加到 :
17-BasicRegionNavigation/ModuleA/ModuleAModule.cs
此代码:
_regionManager.RequestNavigate("ContentRegion", new Uri("ViewA", UriKind.Relative));
其中:ViewA
对应于您要显示的目标视图。
ContentRegion
对应于您的 MainRegion,您可以在 :
17-BasicRegionNavigation/BasicRegionNavigation/ViewModels/MainWindowViewModel.cs
看起来像:
using Microsoft.Practices.Unity;
using ModuleA.Views;
using Prism.Modularity;
using Prism.Regions;
using Prism.Unity;
using System;
namespace ModuleA
{
public class ModuleAModule : IModule
{
IRegionManager _regionManager;
IUnityContainer _container;
public ModuleAModule(RegionManager regionManager, IUnityContainer container)
{
_regionManager = regionManager;
_container = container;
}
public void Initialize()
{
_container.RegisterTypeForNavigation<ViewA>();
_container.RegisterTypeForNavigation<ViewB>();
_regionManager.RequestNavigate("ContentRegion", new Uri("ViewA", UriKind.Relative));
}
}
}
现在如何在 MainWindow 初始化之前添加登录 Window ??
其中一种方法是在模块外部的某处添加 CompositeCommand,以便它们都可以使用它...
public class ApplicationCommands
{
public static CompositeCommand NavigateCommand = new CompositeCommand();
}
然后如果你想让 ViewA 成为默认值
在 ModuleAModule 的 Initialize() 方法中添加
ApplicationCommands.NavigateCommand.Execute(typeof(ViewA));
如果您希望 ViewB 成为默认值,则在 ModuleBModule 的 Initialize() 方法中添加
ApplicationCommands.NavigateCommand.Execute(typeof(ViewB));
还有更多方法,但不知道您的逻辑和使用的所有代码,所以这个似乎是最简单的方法。
如果您正在使用 IRegionManager
,那么您可以这样做。
_regionManager.RegisterViewWithRegion("YourRegionName", typeof(ViewA));