WPF的Prism框架简介

  1. 什么是Prism
    Prism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。

     Prism是一个用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松耦合、可维护和可测试的XAML应用程序的框架。 每个平台都有独立的版本,它们将按照独立的时间表开发。 Prism提供了一组设计模式的实现,这些模式有助于编写结构良好和可维护的XAML应用程序,包括MVVM、依赖注入、命令、EventAggregator等。 Prism的核心功能是。net Standard 2.0、。net Framework 4.5 / 4.7支持的共享代码库。 那些需要特定于平台的内容在目标平台的相应库中实现。 Prism还提供了这些模式与目标平台的良好集成。 例如,Prism For Xamarin Forms允许您使用一个单元可测试的导航抽象,但它是位于平台概念和导航api之上的层,因此您可以充分利用平台本身提供的功能,但是以MVVM的方式完成的。
    
     Prism使用包含重要架构设计原则(如关注点分离和松耦合)的设计模式,帮助您设计和构建包含重要表示和业务逻辑的应用程序,这些表示和业务逻辑通常与后端系统和服务交互,并使用分层架构, 可以在物理上跨多个层部署。 预计该应用程序将在其生命周期内显著发展,以响应新的需求和商业机会。 简而言之,这些应用程序是“为持久而构建”和“为改变而构建”的。 不需要这些特性的应用程序可能无法从Prism中受益。
    

1.1. 框架目标
Prism 旨在帮助您设计和构建丰富、灵活且易于维护的 WPF 应用程序。棱镜图书馆实施的设计模式体现了重要的建筑设计原则,如关注点分离和松散耦合。使用棱镜库提供的设计模式和功能,您可以使用松散耦合的组件设计和构建应用程序,这些组件可以独立演变,但可以轻松无缝地集成到整体应用中。

    Prism 设计围绕核心建筑设计原则,即关注点分离和松散耦合。这使得Prism可以提供许多好处,包括:

重复使用:Prism 通过允许轻松开发、测试和集成到一个或多个应用程序中来促进重用。通过重复使用单元测试的组件,可以通过依赖性注入在运行时间轻松发现和集成,以及通过使用可在应用程序中重复使用的应用程序级功能封装模块,在应用级别实现重复使用。
可扩展性:Prism 通过管理组件依赖性、使组件在运行时间更容易集成或替换为替代实现以及提供将应用程序分解为可独立更新和部署的模块的能力,帮助创建易于扩展的应用程序。Prism库本身的许多组件也可以扩展或更换。
灵活性:Prism 有助于创建灵活的应用程序,使它们能够随着新功能的开发和集成而更容易更新。Prism还允许使用共同服务和组件开发 WPF 应用程序,从而允许以最适当的方式部署和使用应用程序。它还允许应用程序根据角色或配置提供不同的体验。
团队发展:Prism 通过允许单独的团队独立开发甚至部署应用程序的不同部分来促进团队发展。Prism 有助于最大限度地减少跨团队依赖性,并允许团队专注于不同的功能领域(如 UI 设计、业务逻辑实现和基础架构代码开发),或不同业务级别的功能领域(如简介、销售、库存或物流)。
质量:Prism 通过允许对共同服务和组件进行全面测试并提供给开发团队,有助于提高应用程序的质量。此外,通过提供对常见设计模式的充分测试实施,以及充分利用这些模式所需的指导,Prism 允许开发团队专注于其应用要求,而不是实施和测试基础架构代码。
1.2. 先决条件
XAML (Extensible Application Markup Language)[XAML(可扩展应用标记语言)]:声明性地定义和初始化 WPF 应用程序中的用户界面的语言。
Data binding[数据绑定]这就是 UI 元素与 WPF 中的组件和数据连接的方式。
Resources[资源]以下是 WPF 中创建和管理样式、数据模板和控制模板的方式。
Commands[命令]以下是用户手势和输入连接到控件的方式。
User controls[用户控制]这些组件提供自定义行为或自定义外观。
Dependency properties[依赖属性]这些是通用语言运行时间 (CLR) 属性系统的扩展,使属性设置和监控能够支持数据绑定、路由命令和事件。
Behaviors[行为]行为是封装交互式功能的对象,可轻松应用于用户界面中的控件。
2. 官方地址
2.1. github地址
https://github.com/PrismLibrary/Prism

    基于Prism的VisualStudio扩展包模板: Prism Template Pack,下载它后可以快速创建基于Prism的项目。

2.2. 官方学习文档:(以下推荐MSDN,微软的)
https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff921153(v=pandp.40)

  1. Prism框架内容
    框架中包括 MVVM、依赖注入、Command、Message Event、导航、弹窗等功能。

  2. 基本概念
    Modules(模块):
    模块是可独立开发、测试和(可选)部署的功能包。在许多情况下,模块由单独的团队开发和维护。典型的棱镜应用程序由多个模块构建。模块可用于表示特定的业务相关功能(例如,配置文件管理),并封装实现该功能所需的所有视图、服务和数据模型。模块还可用于封装可用于多个应用程序重复使用的常见应用程序基础架构或服务(例如,记录和例外管理服务)。

Module catalog(模块目录):
在复合应用程序中,模块必须由主机应用程序在运行时间发现并加载。在 Prism 中,模块目录用于指定要加载的模块、加载时间以及按什么顺序加载。模块目录由模块经理和模块加载器组件使用,它们负责在模块处于远程时下载模块,将模块的组件加载到应用程序域中,并初始化模块。Prism 允许以不同的方式指定模块目录,包括程序化地使用代码、声明性地使用 XAML 或使用配置文件。如果需要,您也可以实施自定义模块目录。

Shell(壳):
外壳是主机应用程序,可加载模块。外壳定义了应用程序的整体布局和结构,但它通常不知道它将托管的确切模块。它通常实现通用应用程序服务和基础架构,但应用程序的大部分功能和内容都实现在模块中。外壳还提供顶层窗口或视觉元素,然后托管加载模块提供的不同 UI 组件。

Views(视图):
视图****是 UI 控件,可将 UI 封装为应用程序的特定功能或功能区域。视图与 MVVM 模式一起使用,该模式用于将 UI 与应用程序的演示逻辑和数据之间的问题进行彻底分离。视图用于封装 UI 并定义用户交互行为,从而允许独立于基础应用功能更新或替换视图。视图使用数据绑定与视图模型类进行交互。

View models(视图模型):
视图模型是封装应用程序演示逻辑和状态的类。它们是 MVVM 模式的一部分。查看模型封装了应用程序的大部分功能。查看模型定义属性、命令和事件,视图中的控件可以将这些属性、命令和事件与数据绑定在一起。

Models(模型):
模型类封装应用程序数据和业务逻辑。它们用作 MVVM 模式的一部分。模型封装数据以及任何相关的验证和业务规则,以确保数据一致性和完整性。

Commands(命令):
命令用于封装应用程序功能,使其能够独立于应用程序的 UI 进行定义和测试。它们可以定义为命令对象或视图模型中的命令方法。棱镜提供代表委员会类和复合通信类。后者用于表示所有一起调用的命令集合。

Regions(区域):
命令用于封装应用程序功能,使其能够独立于应用程序的 UI 进行定义和测试。它们可以定义为命令对象或视图模型中的命令方法。棱镜提供代表委员会类和复合通信类。后者用于表示所有一起调用的命令集合。

Navigation(导航):
导航定义为应用坐标因用户与应用程序的交互或内部应用状态更改而更改到其 UI 的过程。棱镜支持两种导航样式:基于状态的导航,其中对现有视图的状态进行更新以实现简单的导航方案,以及创建新视图并在应用程序 UI 中替换旧视图的视图切换导航。视图切换导航使用基于统一资源标识符 (URI) 的导航机制与棱镜区域相结合,以便实施灵活的导航方案。

EventAggregator(事件聚合器):
复合应用程序中的组件通常需要以松散耦合的方式与应用程序中的其他组件和服务进行通信。为了支持这一点,Prism 提供了事件聚合器组件,该组件实施了酒吧子事件机制,从而允许组件发布事件和其他组件来订阅这些事件,而不需要提及其他事件。事件聚合器通常用于允许在不同模块中定义的组件相互通信。

Dependency injection container(依赖性注射容器):
复合应用程序中的组件通常需要以松散耦合的方式与应用程序中的其他组件和服务进行通信。为了支持这一点,Prism 提供了事件聚合器组件,该组件实施了酒吧子事件机制,从而允许组件发布事件和其他组件来订阅这些事件,而不需要提及其他事件。事件聚合器通常用于允许在不同模块中定义的组件相互通信。

Services(服务):
服务是封装非 UI 相关功能的组件,例如记录、异常管理和数据访问。服务可以通过应用程序或模块内定义。服务通常在依赖性注射容器中注册,以便根据需要定位或构建,并由依赖它们的其他组件使用。

Controllers(控制器):
控制器是用于协调在应用程序 UI 区域内显示的意见的构建和初始化的类。控制器封装了确定要显示哪些视图的演示逻辑。控制器将使用 Prism 的视图切换导航机制,该机制提供可扩展的 URI 导航机制,以协调区域内意见的构建和放置。应用控制器模式定义了一个抽象概念,该抽象图映射到此责任。

Bootstrapper(引导器):
控制器是用于协调在应用程序 UI 区域内显示的意见的构建和初始化的类。控制器封装了确定要显示哪些视图的演示逻辑。控制器将使用 Prism 的视图切换导航机制,该机制提供可扩展的 URI 导航机制,以协调区域内意见的构建和放置。应用控制器模式定义了一个抽象概念,该抽象图映射到此责任。
————————————————
rism框架
1、关于Prism框架
官方地址:http://prismlibrary.com
官方源码:https://github.com/PrismLibrary/Prism
版本:8.1

2、功能说明
Prism提供了一组设计模式的实现,有助于编写结构良好的可维护XAML应用程序。
包括MVVM 依赖注入 命令 事件聚合器
Prism减重
Autofac 、Dryloc 、 Mef 、Niniject 、StruyctureMap、Unity。
3、Prism的关键程序
Prism.Core 实现MVVM的核心功能,属于一个与平台无关的项目。
Prism.Wpf 包含了DialogService【弹窗】 Region【注册】 Module 【模块】 Navigation【导航】 其他的一些WPF 功能。
Prism.Unity Prism.Unity.Wpf.dll Prism.Dryloc.Wpf.dll
4、获取Prism框架
Prism.dll Prism.core
Prism.Wpf.dll Prism.Wpf
Prism.Unity.Wpf.dll Prism.Unity
Prism.Dryloc.Wpf.dll Prism.Dryloc
5、数据处理,数据通知的五种方式
新建类:MainViewModel 继承:BindableBase

using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;

namespace WpfApp2
{
public class MainViewModel : BindableBase
{
private int _value = 100;
public int Value
{
get { return _value; }
set
{
//通知的五种方式
//第一种方式
//SetProperty(ref _value, value);
//第二种方式
//this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs(“Value”));
//第三种方式
//this.RaisePropertyChanged();
//第四种方式 Value :可以通知其他属性
SetProperty(ref _value, value, “Value”);
//第五种方式
SetProperty(ref _value, value, OnPropertyChanged);
}
}
public void OnPropertyChanged()
{

    }
    public MainViewModel()
    {
    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
xaml代码:


<Window.DataContext>
local:MainViewModel</local:MainViewModel>
</Window.DataContext>






1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
6、行为处理
1、Prism的行为处理
DelegateCommand
基本用法 :
新建类:MainViewModel 继承 BindableBase

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;

namespace WpfApp4
{
public class MainViewModel:BindableBase
{
private string _value = “Hellow Word!”;
public ICommand BtnCommand { get => new DelegateCommand(doExecute); }
public string Value
{
get { return _value; }
set {
SetProperty(ref _value, value);
}
}
public MainViewModel()
{

    }

    public void doExecute() 
    {
        this.Value = "Fuck You!";
    }
  
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
检查状态
第一种检查状态:

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;

namespace WpfApp4
{
public class MainViewModel:BindableBase
{
private string _value = “Hellow Word!”;

     public DelegateCommand BtncheckCommand { get; }
    public string  Value
    {
        get { return _value; }
        set {  
            SetProperty(ref _value, value);
             //触发命令相关的可执行的检查逻辑 
            BtncheckCommand.RaiseCanExecuteChanged();
        }
    }
    public MainViewModel() 
    {
        BtncheckCommand = new DelegateCommand(doExecute,doCheckExecute);
    }

    public void doExecute() 
    {
        this.Value = "Fuck You!";
    }
    public bool doCheckExecute()
    {
        return this.Value == "Hellow  Word!";
    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
第二种检查状态:

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;

namespace WpfApp4
{
public class MainViewModel:BindableBase
{
private string _value = “Hellow Word!”;

     public DelegateCommand BtncheckCommand { get; }
    public string  Value
    {
        get { return _value; }
        set {  
            SetProperty(ref _value, value); 
        }
    }
    public MainViewModel() 
    {
        //ObservesProperty : 监听一个属性的变化,当这个属性值发生变化后,进行状态检查
        //当Value发生变化的时候主动去触发一个状态检查
        //可以监听多个属性  后面.ObservesProperty(()=>Value)
        BtncheckCommand = new DelegateCommand(doExecute, doCheckExecute).ObservesProperty(()=>Value); 
    } 吧
    public void doExecute() 
    {
        this.Value = "Fuck You!";
    }
    public bool doCheckExecute()
    {
        return this.Value == "Hellow  Word!";
    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
第三种检查方式:

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;

namespace WpfApp4
{
public class MainViewModel:BindableBase
{
private string _value = “Hellow Word!”;
public ICommand BtnCommand { get => new DelegateCommand(doExecute); }
public DelegateCommand BtncheckCommand { get; }
public string Value
{
get { return _value; }
set {
SetProperty(ref _value, value);
}
}
private bool _state;

    public bool State
    {
        get { return Value == "Hellow  Word!"; }
        set {
            SetProperty(ref _state, value); 
        }
    }

    public MainViewModel() 
    { 
         //第三种检查方式  通过  ObservesCanExecute  进行一个属性值观察,进行动态的状态处理
         BtncheckCommand = new DelegateCommand(doExecute).ObservesCanExecute(() => State);
    }

    public void doExecute() 
    {
        this.Value = "Fuck You!";
        this.State =!this.State;
    } 
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
xaml代码:


<Window.DataContext>
local:MainViewModel</local:MainViewModel>
</Window.DataContext>








1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
异步处理

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace WpfApp4
{
public class MainViewModel:BindableBase
{
private string _value = “Hellow Word!”;
public ICommand BtnAsyncCommand { get => new DelegateCommand(doExecuteAsync); }
public DelegateCommand BtncheckCommand { get; }
public string Value
{
get { return _value; }
set {
SetProperty(ref _value, value);
}
}

    public MainViewModel() 
    {
   
    }


    public async void doExecuteAsync() 
    {
        await Task.Delay(5000);
        this.Value = "再见!";
    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
xaml代码:


<Window.DataContext>
local:MainViewModel</local:MainViewModel>
</Window.DataContext>







1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
泛型参数

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace WpfApp4
{
public class MainViewModel:BindableBase
{
private string _value = “Hellow Word!”;
public ICommand BtnAsyncCommand { get => new DelegateCommand(doExecuteAsync); }

     public DelegateCommand BtncheckCommand { get; }
    public string  Value
    {
        get { return _value; }
        set {  
            SetProperty(ref _value, value);
            //触发命令相关的可执行的检查逻辑
           // BtncheckCommand.RaiseCanExecuteChanged();
        }
    }
     
    public async void doExecuteAsync(string str) 
    {
        await Task.Delay(5000);
        this.Value = str;
    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
xaml代码:


<Window.DataContext>
local:MainViewModel</local:MainViewModel>
</Window.DataContext>







1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.

事件命令 [事件转命令] InvokeCommandAction
新建类:MainViewModel:BindableBase

using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace WpfApp4
{
public class MainViewModel:BindableBase
{
public ICommand BtnEventCommand { get => new DelegateCommand(doEventExecute); }
public void doEventExecute(object args)
{

    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
xaml代码:


<Window.DataContext>
local:MainViewModel</local:MainViewModel>
</Window.DataContext>





        <ComboBox  SelectedIndex="0">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <prism:InvokeCommandAction Command="{Binding BtnEventCommand}"
                                               TriggerParameterPath=""></prism:InvokeCommandAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <ComboBoxItem Content="111"></ComboBoxItem>
            <ComboBoxItem Content="222"></ComboBoxItem>
            <ComboBoxItem Content="333"></ComboBoxItem>
            <ComboBoxItem Content="444"></ComboBoxItem>
        </ComboBox>
    </StackPanel>
</Grid>
备注: 顶部引用两个命名空间: xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:prism="http://prismlibrary.com/" 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Prism框架引用初始化 PrismBootstrapper 启动器 1、新建Startup 类,继承:PrismBootstrapper

using Prism.Ioc;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;

namespace WpfApp5
{
public class Startup : PrismBootstrapper
{
///
/// 返回一个Shell :主窗口
///
///
///
protected override DependencyObject CreateShell()
{
throw new NotImplementedException();
}
///
///
///
///
///
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
throw new NotImplementedException();
}
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
2、将App.xaml代码注释



<Application.Resources>

</Application.Resources>
1. 2. 3. 4. 5. 6. 7. 8. 9. 3、在App.xaml.cs 构造函数中启动

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp5
{
///
/// Interaction logic for App.xaml
///
public partial class App : Application
{
public App()
{
new Startup().Run();
}
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
用 PrismApplication 启动器
修改App.xaml代码

<prism:PrismApplication x:Class=“WpfApp1.App”
xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml”
xmlns:local=“clr-namespace:WpfApp1”
xmlns:prism=“http://prismlibrary.com/”>

<Application.Resources>

</Application.Resources>

</prism:PrismApplication>
备注: 引用 xmlns:prism=“http://prismlibrary.com/”
将头尾标签改为 :prism:PrismApplication
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
App.xaml.cs 继承 PrismApplication,代码

using Prism.Ioc;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp1
{
///
/// Interaction logic for App.xaml
///
public partial class App : PrismApplication
{
///
/// 返回一个shell 【窗口】
///
///
///
protected override Window CreateShell()
{
return Container.Resolve();
}

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
         
    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
基于Prism框架的登录跳转
App.xaml代码:

<prism:PrismApplication x:Class=“WpfApp1.App”
xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml”
xmlns:local=“clr-namespace:WpfApp1”
xmlns:prism=“http://prismlibrary.com/”
>

<Application.Resources>

</Application.Resources>

</prism:PrismApplication>
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
App.xaml.cs代码:

using Prism.Ioc;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp1
{
///
/// Interaction logic for App.xaml
///
public partial class App : PrismApplication
{
///
/// 返回一个shell 【窗口】
///
///
///
protected override Window CreateShell()
{
return Container.Resolve();
}
///
/// 初始化 shell 主窗口
///
///
protected override void InitializeShell(Window shell)
{
var loginWindow = Container.Resolve();
if (loginWindow == null || loginWindow.ShowDialog() == false)
{
Application.Current.Shutdown();
}
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{

    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
登录代码:Login.xaml






1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Login.xaml.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace WpfApp1
{
///
/// Login.xaml 的交互逻辑
///
public partial class Login : Window
{
public Login()
{
InitializeComponent();
}

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        this.DialogResult = true;
    }
}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
MainWindow.xaml 代码:


</Grid>
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ViewModelLocator对象 帮助进行 View与ViewModel的绑定 标准状态: AutoWireViewModel,默认行为true ViewModel与视图类型位于同一个程序集中 ViewModel位于.ViewModel子命名空间中 视图位于.Views子命名空间中 ViewModel名称与视图名称对应 ,以“ViewModel”结尾 实例代码如下: 新建子文件夹:ViewModels/MainWindowViewModel 类,代码如下:

using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Text;

namespace WpfApp6.ViewModels
{
public class MainWindowViewModel : BindableBase
{
private string _value = " Hellow Word";

    public string Value
    {
        get { return _value; }
        set
        {
            SetProperty(ref _value, value);
        }
    }

}

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
新建子文件夹,Views/MainWindow.xaml,代码如下:






1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
设置启动项:
App.xaml,代码如下:

<prism:PrismApplication x:Class=“WpfApp6.App”
xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml”
xmlns:local=“clr-namespace:WpfApp6”
xmlns:prism=“http://prismlibrary.com/”
>
<Application.Resources>

</Application.Resources>

</prism:PrismApplication>
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
App.xaml.cs,代码如下:

登录后复制
using Prism.Ioc;
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp6
{
///
/// Interaction logic for App.xaml
///
public partial class App : PrismApplication
{
protected override Window CreateShell()
{
return Container.Resolve<Views.MainWindow>();
}

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
         
    }
}
### 回答1: WPF Prism框架是一个面向对象的框架,用于开发模块化、可扩展的WPF应用程序,它基于MVVM设计模式和依赖注入技术。该框架的主要目的是能够轻松地实现可插拔的模块,公共的服务、组件和工具类的共享,同时也提供了灵活的路由、事件聚合、模块加载、导航和命令处理等机制。使用WPF Prism框架可以快速地开发出灵活的WPF应用程序,从而提高代码质量和开发效率,减少代码的维护难度。 WPF Prism框架具有以下的特点: 1. 扩展性:可以轻松地添加新的模块、服务和组件,同时也可以快速替换现有的组件。 2. 可重用性:提供了丰富的公共组件、服务和工具类,从而可以提高代码的可重用性。 3. 灵活性:提供了灵活的路由、事件聚合、模块加载和导航等机制,能够更好地满足应用程序的需求。 4. 易用性:提供了一套完整的MVVM设计模式和依赖注入技术的实践方案,从而能够更好地组织应用程序的逻辑。 总之,WPF Prism框架是一个强大的工具,能够让我们更好地开发WPF应用程序,提高代码质量和开发效率,实现可插拔的模块化和可扩展性,同时也具有灵活性和易用性。 ### 回答2: WPF Prism框架是一种面向MVVM模式的开源框架,它帮助开发人员使用模块化的方式构建可扩展、可重用和易于维护的WPF应用程序。该框架主要由Microsoft和模式仲裁者团队开发和维护,它借鉴了许多现代的软件开发理念,比如IoC容器、依赖注入和事件聚合器等。 WPF Prism框架的核心思想是将应用程序分解为许多可独立维护和扩展的模块。这些模块可以基于业务逻辑、UI、数据或任何其他特征进行分组。在该框架中,模块由各种名为“组件”的构建块组成。这些组件包括视图(View)、视图模型(ViewModel)、服务(Service)、模型(Model)等。通过基于这些组件的开发,可以实现具有高度可伸缩性和可重用性的应用程序。 为了实现这种模块化开发和组件化架构,WPF Prism框架提供了一些重要的工具和特性。例如,在该框架中可以使用依赖注入容器(如Unity)来管理组件及其依赖关系。此外,该框架还提供了一些基于事件的消息机制,可方便地实现模块间的交互和通信。 总体来说,WPF Prism框架是一种利用开源技术实现企业级应用程序开发的最佳选择。它具有良好的模块化、组件化和可扩展性特性,可以在实现复杂WPF应用程序时提高开发效率和代码质量。 ### 回答3: WPF Prism是一个基于WPF框架,它为大型应用程序提供了一种组织、设计和部署的方式。它旨在帮助开发者构建可扩展、可维护和可测试的WPF应用程序。 WPF Prism采用了面向模块的编程思想,它将整个应用程序划分为多个模块,每个模块都包含自己的逻辑和用户界面。这种模块化设计使得应用程序易于扩展和维护,同时也简化了开发流程。 WPF Prism同时提供了一组强大的工具和功能,如依赖注入、命令模式和事件聚合等,这些功能让WPF应用程序更加易于开发和测试。它还提供了一个强大的导航和区域管理系统,开发者可以使用这些系统来管理不同部分的用户界面和功能。 总之,WPF Prism是一个优秀的框架,它为开发者提供了全面的工具和功能,使得构建WPF应用程序变得更加容易和高效。它的结构良好、可扩展性强,而且可以充分利用WPF的强大功能。无论是大型企业应用程序还是小型桌面应用程序,WPF Prism都是一个理想的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光怪陆离的节日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值