WPF+prism项目致胜秘籍

前置知识:

该项目为C/S结构,即客户端/服务端。

Prism框架能够实现:模块化、导航、依赖注入、事件聚合器、命令绑定、可测试性功能。

具体为:区域、模块化、导航、对话服务、发布订阅

依赖注入:老板给超市注入某个商品,顾客想买就买,互不依赖。

Prism学习

配置Prism项目

1、创建WPF项目

2、在依赖项中 管理NuGet程序包,下载安装Prism框架(有依赖注入功能的版本)。

3、配置App.xaml文件

引入prism名称空间,将<Application>框架改成<prism:PrismApplication>

4、配置App.xaml.cs文件

继承 PrismApplication,编写两个方法,一个为启动页,一个为注入服务

 PrismApplication也是继承Application的

此时启动项目,会发现有两个窗口,因为本身StartupUri="MainWindow.xaml">会有启动窗口,后来又在App.xaml.cs文件中设置了启动页。所以要把前面那个删除。

5、如此建一个prism项目可能过于复杂,可以直接不建WPF项目,直接建Prism Full App项目

Prism-区域

实现如下界面:点击不同模块,出现不同内容

 实现思路:把第二行设成用户控件,并且设置三个,每个模块按钮绑定一个用户控件。点击就出现相应用户控件。

首先在主界面第一行写出三个按钮(并且绑定命令Y,以及一个函数参数),第二行绑定用户控件X

在views中定义好三个用户控件界面 

在视图模型中,定义一个用户控件属性X,定义一个命令Y,用以执行方法O,命令Y放在构造函数里,项目启动就执行命令Y,同时方法O嵌在命令Y上,所以方法O也执行,方法O会判断是哪个按钮及其的参数,而给用户控件X赋值。

具体实现

1、在MainWindow.xaml中编写出三个按钮

2、新建一个Views文件夹用于放用户控件,新建3个用户控件,在其xaml文件中编写内容:

<TextBlock Text="我是C" FontSize="100"></TextBlock>

因为点击需要用户控件的替换,所以要给窗口建立视图模型。

3、新建一个ViewModels文件夹用于放视图模型,新建MainWindowViewModel视图模型

视图模型命名必须是窗口名字+ViewModel

4、 在MainWindowViewModel视图模型中添加一个绑定的属性,(因为需要绑定一个用户控件)并且该属性改变时,要通知界面。

 继承:BindableBase,其中的  RaisePropertyChanged()方法,可以实现通知界面
 propfull快捷键 

 // 显示的内容
 private UserControl _ShowContent;
 public UserControl ShowContent
 {
     get { return _ShowContent; }
     set
     {
         _ShowContent = value;
         RaisePropertyChanged();
     }
 }

5、在主窗口中绑定视图模型的属性

<ContentControl Content="{Binding ShowContent}"></ContentControl>

在主窗口设置prism中的一个属性让其自己找到窗口上下文,因为是按名字找的,所以才有上述命名规则

  xmlns:prism="http://prismlibrary.com/&
### 如何在WPF中使用Prism框架实现模块化开发 #### 1. 安装必要的NuGet包 为了在WPF应用程序中使用Prism框架,需要安装`Prism.Wpf`包。可以通过Visual Studio的NuGet包管理器控制台运行以下命令来完成安装[^2]: ```bash Install-Package Prism.Wpf ``` #### 2. 配置Bootstrapper或Application类 Prism框架的核心功能之一是通过配置启动过程来初始化应用程序。可以继承`PrismApplication`类并重写其方法以实现自定义逻辑。以下是典型的App.xaml.cs文件结构: ```csharp using Prism.Ioc; using Prism.Modularity; using System.Windows; namespace YourNamespace { public class Bootstrapper : Prism.PrismApplication { protected override Window CreateShell() { // 解析主窗口实例 return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { // 注册依赖项到IoC容器 } protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) { base.ConfigureModuleCatalog(moduleCatalog); // 添加模块至模块目录 moduleCatalog.AddModule<YourModuleName.YourModuleClass>(); } } } ``` 上述代码展示了如何通过`CreateShell`方法指定主窗口,并通过`RegisterTypes`注册依赖项以及通过`ConfigureModuleCatalog`添加模块。 #### 3. 实现MVVM模式 Prism框架广泛支持MVVM设计模式,这有助于分离UI层与业务逻辑层。视图(View)通常绑定到视图模型(ViewModel),而ViewModel则负责处理数据并与服务交互。例如,在XAML中绑定属性的方式如下所示: ```xml <TextBlock Text="{Binding SomeProperty}" /> ``` 其中`SomeProperty`是一个存在于对应ViewModel中的公共属性[^1]。 #### 4. 使用依赖注入(Dependency Injection, DI) Prism内置了一个强大的DI容器用于管理对象生命周期和服务定位。开发者可以在`RegisterTypes`方法中注册接口及其具体实现形式。例如: ```csharp protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.Register<IDataService, DataService>(); } ``` 这里将`IDataService`接口映射到了具体的`DataService`类上[^3]。 #### 5. 模块化的实践 模块化允许我们将大型应用拆分为多个独立的小型组件(即模块),这些模块可以根据需求动态加载或者卸载。每个模块都应该遵循一定的命名约定并且包含自己的入口点。下面展示的是一个简单的模块声明方式: ```csharp public class ModuleA : IModule { private readonly IRegionManager _regionManager; public ModuleA(IRegionManager regionManager) { _regionManager = regionManager; } public void OnInitialized(IContainerProvider containerProvider) { // 初始化完成后执行的操作 } public void Initialize() { // 加载资源、订阅事件等操作 } } ``` 此部分说明了如何创建符合IModule接口标准的新模块,并且利用构造函数注入获取所需的服务实例[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值