本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结。
总共分三个部分:
基础篇主要针对C#初学者,巩固C#常用知识点;
中级篇主要针对WPF布局与MaterialDesign美化设计,在减轻代码量的情况做出漂亮的应用;
终极篇为框架应用实战,包含系统分层、MVVM框架Prism安装与使用、ORM框架EntityFramework Core配置与使用、开源数据库Postgresql配置与使用。
目录
- Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 基础篇
- Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 中级篇
- Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 终极篇
前言
此篇主要介绍系统分层模型、如何安装Prism快速开发模板与MVVM框架使用、如何配置ORM框架Entity Framework Core与使用、以及Postgresql数据库配置。
系统分层
项目比较简单,大概分层模型如下:
- View双向绑定ViewModel;
- ViewModel调用Service取得DataModel业务数据;
- Service通过调用Repository取得Entity数据;
- Repository调用Entity Framework Core,自动创建Sql执行并返回Entity对象;
- Entity Framework Core通过驱动链接数据库。
![05e66052d832f026d6e6fa97cfe8911f.png](https://img-blog.csdnimg.cn/img_convert/05e66052d832f026d6e6fa97cfe8911f.png)
系统分层图
如果项目功能或者对接端末比较多,最好扩展成微服务。
![5ed604431f5b8e9218a7239eb0c3553d.png](https://img-blog.csdnimg.cn/img_convert/5ed604431f5b8e9218a7239eb0c3553d.png)
微服务架构图
MVVM框架之Prism
MVVM(Model–view–viewmodel)是微软的WPF和Silverlight架构师之一John Gossman于2005年发布的软件架构模式。目的就是把用户界面设计与业务逻辑开发分离,方便团队开发和自动化测试。目前流行的Android开发、Web开发都在使用,具体MVVM的介绍参照个人博客:核心框架MVVM与MVC、MVP的区别(图文详解)。
一、无框架的MVVM实现
设计与逻辑分离的基本就是绑定,通过发布者订阅者模式实现数据更新通知。
1、属性绑定
默认属性为单向绑定,如果需要双向绑定需要实现INotifyPropertyChanged接口。
第一步:一般是建立如下基类。
using System;using System.ComponentModel;using System.Runtime.CompilerServices;namespace MvvmDemo.Common{ /// /// Viewmodel基类,属性双向绑定基础 /// public class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; /// /// 属性变更通知 /// /// 属性名 public void NotifyPropertyChanged([CallerMemberName] String propertyName = "") { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }}
第二步:各个ViewModel继承基类。
public class UserViewModel : ViewModelBase { private string _userId; private string _userName; /// /// 用户名 /// public string UserId { get { return _userId; } set { _userId = value; NotifyPropertyChanged(); } } /// /// 用户名 /// public string UserName { get { return _userName; } set { _userName = value; NotifyPropertyChanged(); } } }
第三步:Xaml绑定属性,实现消息通知。
备注:通过IValueConverter可以做一些特殊绑定处理。比如,经典的就是Bool值控制Visibility。
[ValueConversion(typeof(bool), typeof(Visibility))] public class BoolToVisibiltyConverter : MarkupExtension, IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool flag = false; if (value is bool)