【问题标题】:How to load default view in Prism WPF C#如何在 Prism WPF C# 中加载默认视图
【发布时间】:2017-05-08 19:25:39
【问题描述】:

我正在使用这个回购: 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));
        }
    }
}

文件夹结构(解决方案)

在初始化主窗口之前如何显示登录窗口或其他窗口?

【问题讨论】:

    标签: c# wpf xaml mvvm prism


    【解决方案1】:

    其中一种方法是将 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));
    

    【讨论】:

      【解决方案2】:

      我解决了部分问题:

      通过将此代码添加到:

      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 初始化之前添加登录窗口??

      【讨论】:

      • 为此,您可以在启动(引导程序)中将您的登录设置为第一次登录,并且只有当登录通过时,您才能从登录窗口进入 mainWindow
      猜你喜欢
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多