WPF MVVM框架 - Prism 简单接入

99

1. 安装Prism.DryIoc包

  <ItemGroup>
    <PackageReference Include="Prism.DryIoc" Version="9.0.537" />
  </ItemGroup>

2. 了解PrismApplication对象

https://github.com/PrismLibrary/Prism/blob/master/src/Wpf/Prism.DryIoc.Wpf/PrismApplication.cs

PrismApplication 对象

PrismApplication继承PrismApplicationBase,PrismApplicationBase继承Application

3. 调整App.xaml相关内容

App.xaml.cs 调整

调整App基础的基类改为PrismApplication,从写CreateShell()方法、RegisterTypes()方法。

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}







public partial class App : PrismApplication
{
    protected override Window CreateShell()
    {
        // 返回一个窗体,从容器中解析
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        // TO DO : 依赖注入
        //// 首页
        //containerRegistry.RegisterForNavigation<HomeView, HomeViewModel>();
        ////主窗体
        //containerRegistry.RegisterForNavigation<MainWindow, MainWindowModel>();
        //// 备忘录
        //containerRegistry.RegisterForNavigation<MemoView, MemoViewModel>();

        //// 设置
        //containerRegistry.RegisterForNavigation<SettingView, SettingViewModel>();
        //// - 关于
        //containerRegistry.RegisterForNavigation<AboutView, AboutViewModel>();
        //// - 个性化
        //containerRegistry.RegisterForNavigation<PersonalizeView, PersonalizeViewModel>();
        //// - 系统设置
        //containerRegistry.RegisterForNavigation<SystemSettingsView, SystemSettingsViewModel>();

        //// 待办事项
        //containerRegistry.RegisterForNavigation<ToDoView, ToDoViewModel>();
    }
}

App.xaml 调整

引入xmlns:prism命名空间,移除StartupUri,替换Application改为prism:PrismApplication

<Application x:Class="Mvvm_Prism_01.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Mvvm_Prism_01"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
         
    </Application.Resources>
</Application>
<prism:PrismApplication x:Class="Mvvm_Prism_01.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Mvvm_Prism_01"
             xmlns:prism="http://prismlibrary.com/">
    <Application.Resources>

    </Application.Resources>
</prism:PrismApplication>

测试启动

<Window x:Class="Mvvm_Prism_01.MainWindow"
        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:local="clr-namespace:Mvvm_Prism_01"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="300">
    <Grid>
        <TextBlock Text="Hello, World!" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"/>
    </Grid>
</Window>