如何在 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));