# WPF-AppTemplate **Repository Path**: dsfdsfsdfsdf/wpf-app-template ## Basic Information - **Project Name**: WPF-AppTemplate - **Description**: WPF App Template(WAT)是一个基于MVVM的程序模板,内置了一些开发应用程序时常用的基础功能,可以让用户快速开始业务功能的开发。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2023-12-27 - **Last Updated**: 2023-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WPF App Template ## 介绍 WPF APP Template(WAT)是一个新建WPF应用的便利模板,它: 1. 基于CommunityToolkit.Mvvm进行MVVM开发 2. 内置类似ASP.NET CORE的依赖注入及基于json的配置功能 3. 内置视图及ViewModel自动发现和注册 4. 集成Entity Framework Core以及Code First数据库迁移 5. 内置Tab页风格的视图 6. 内置基础的数据分页查询功能 7. 内置Serilog日志记录和全局异常记录 8. 集成IconFont,并内置一些常用的IconFont图标,以及一些常用的控件 总之,WPF App Template提供了创建WPF应用程序的一些基础功能,帮助你专注于业务功能。 ## 开始使用 #### 项目目录 AppTemplate.UI |__Assets(静态文件目录,放置字体,图片,图标等文件) |__Controls(自定义控件目录,放置程序中用到的自定义控件) |__Converters(自定义转换器目录) |__Dto(数据传输对象目录) |__Framework(程序框架目录,存放系统中实现某些基础功能的代码) |__Resources(资源目录,放置WPF样式,模板等资源) |__Sys(程序系统目录,放置一些系统配置相关的代码) |__ViewModels(统一放置ViewModel的目录) |__Views(统一放置XAML视图文件的目录) |__appsetting.json(json配置文件) |__Root.xaml(整个程序的顶层窗体组件) App.Core(存放业务实体,领域服务已经EF相关代码的项目,用户可按需要自行删除) |__ _MockData(样板数据目录,用户可自行删除) |__ Data(放置EF的数据上下文目录,以及用于Code First数据库迁移的DbContextFactory类) |__ Entities (实体类目录) |__ Enums (枚举类目录) |__ Migrations (数据库迁移文件目录) |__ ServiceImpls(放置领域服务实现类) |__ Services(放置领域服务接口) AppTemplate.Infrastructure(程序使用的基础设施的公用代码项目) |__ DependencyInjection(依赖注入相关代码) |__ EntityBase (系统使用的领域实体基础代码) |__ ExtendMethods (统一放置扩展方法) |__ Paging (EF分页的相关代码) |__ ServiceBase(领域服务基础代码) #### 配置依赖注入 WAT内置了Microsoft.Extensions.DependencyInjection包,目的是保持与asp.net core类似的依赖注入方式。在Sys文件夹的DI.class中初始化了系统的依赖注入。用户有两种方法注册需要注入的类或服务: 1.在sys目录下的ManualServiceRegister.Register方法中手动配置注入 2.对需要注入的类或服务应用InjectAttribute特性,系统启动时会自动搜索并注册这些类或服务。 在需要使用依赖项的地方,通过构造函数注入的方式(与ASP.NET CORE类似),获取依赖项实例。 #### MVVM WAT是基于微软的CommunityToolkit.Mvvm库进行MVVM开发的,并在启动时自动搜索被ViewAttribute特性类修饰的视图,配合依赖注入进行ViewModel与View的自动发现和关联。 在实际开发时,用户在Views文件夹中新建视图(通常是UserControl控件),并在ViewModels中创建对应的ViewModel类,并使用ViewAttribute来关联UserControl与View Model,程序即可自动将ViewModel设置为View的DataContext。 WAT中有一个名为"AppState"的类,该类是程序顶层窗体(Root.xaml)的视图模型,管理程序级别的状态并提供程序级别的基础功能。由于AppState的特殊性,虽然AppState继承自ViewModel,但不是通过自动注入的方式创建实体,而是通过静态单例的形式创建单例,并通过Init方法在程序启动时进行初始化。 WAT提供了名为"ViewModel"的抽象类,作为视图模型的基类。该抽象类包含有对AppState实例的引用,及其他一些基础功能。 #### 配置 WAT内置了对json文件的支持,保持与ASP.NET CORE风格一致的配置形式。用户可通过AppState的Configuration属性读取配置项,或通过Options模式获取配置数据。 #### Entity Framework与数据库迁移 WAT内置了EF Core,并实现了IDesignTimeDbContextFactory类用于对数据库迁移的支持。在实际开发中,用户只需新建表实体类,并在DbContext类中配置表实体,然后使用Code First数据库迁移功能,即可快速新建表并开始开发业务功能。注意:由于在AppDbContextFactory类中无法读取appsettings.json的连接字符串,因此在使用数据库迁移时,需要在AppDbContextFactory的CreateDbContext中手动修改数据库连接字符串。 #### 日志及全局异常记录 WAT内置了Serilog日志组件,无需做额外配置即可通过Log对象记录日志。日志被保存到程序根目录的Logs目录中。同时,WAT在APP.xaml.cs中注册了DispatcherUnhandledException事件,捕获程序的全局异常,并将异常信息保存到log文件中。 #### Tab页 Tab页是程序常用的展示形式,因此WAT内置了Tab页的模板,并对WPF原Tab Control做了一些修改,并加入了关闭按钮,以及一键关闭所有Tab页和克隆Tab页等基础功能 #### IconFont WAT支持IconFont,并内置了约100个常用IconFont图标(在Assets/Fonts目录中)。用户也可以自行下载IconFont字体并整合到WAT中。 #### 其他 WAT还内置了其他常用功能和控件,例如DataGrid数据分页展示,分页控件,带加载动画的按钮等。随着不断积累,WAT还会加入更多常见常用的功能。