首页系统综合问题.NET 5/6/7 中 WPF 如何优雅的开发

.NET 5/6/7 中 WPF 如何优雅的开发

时间2022-12-02 14:45:04发布分享专员分类系统综合问题浏览88

↓推荐关注↓

前言

WPF是微软的.net平台中的一个桌面客户端应用程序框架,经常用于企业开发windows桌面客户端,广泛应用于中小企业快速开发一款工具,本人也是比较喜欢利用WPF开发一些小工具net framework 2 0 。

知名案例

1、虎牙直播客户端

2、西门子医疗上位机

其中西门子医疗的上位机程序称得上使用WPF技术的极其优秀的项目net framework 2 0 。(:德国人写代码真的很严格工整。

当然西门子的.net还是基于framework,模块之间通信用的WCF,依赖注入使用的spring.net我在的时候好像准备改成Autofac了net framework 2 0 。

.net core/5/6/7中开发WPF

伴随着.net5这个半成品出世net framework 2 0 ,.net framework和core正式合并到一起,在core中也是支持创建WPF模板代码的,那么我们如何在新的平台下优雅的使用WPF开发一个小工具呢?

MVVM

老的framework我喜欢使用MvvmLightLibsnet framework 2 0 ,但是目前用过的都知道该包已经被标记为弃用了,推荐使用微软的CommunityToolkit.Mvvm,我们可以在项目文件中添加该包的引用

< PackageReferenceInclude= "CommunityToolkit.Mvvm"Version= "8.0.0"/>

添加好了之后net framework 2 0 我们将我们的viewmodel继承ObservableObject具体使用可以看园子里的一篇文章 示例代码:

publicclassMainWindowViewModel: ObservableObject

///<summary>

///属性变更通知

///</summary>

privatePage _currentPage;

publicPage CurrentPage

get=> _currentPage;

set=> SetProperty( ref_currentPage, value);

//命令绑定

publicRelayCommand ShiftWorkPageCommand { get; set; }

publicRelayCommand OpenWorkSpaceCommand { get; set; }

常用的依赖注入组件有spring.net,autofac,当然autofac在现在看来也是非常流行强大的net framework 2 0 。.net一直有一个自带的依赖注入容器,功能没有autofac强大,但是一般也够用。我们需要在项目文件中导入微软提供的相关的包。

< PackageReferenceInclude= "Microsoft.Extensions.Hosting"Version= "6.0.1"/>

< PackageReferenceInclude= "Microsoft.Extensions.Hosting.Abstractions"Version= "6.0.0"/>

我们会在程序启动的时候创建一个默认的Host宿主对象,WPF的起始类就是app.cs里,我们可以覆写OnStartup方法,在其中启动一个Host,并且将一些服务注册进来net framework 2 0 。如日志,配置文件,数据库配置等。

publicpartialclassApp: Application

publicstaticIServiceProvider ServiceProvider;

protectedasyncoverridevoidOnStartup( StartupEventArgs e)

base.OnStartup(e);

varhostbuilder = CreateHostBuilder(e.Args);

varhost = awaithostbuilder.StartAsync;

ServiceProvider = host.Services;

host.Services.GetRequiredService<MainWindow>?.Show;

publicstaticIHostBuilder CreateHostBuilder( string[] args )

varhostBuilder = Host.CreateDefaultBuilder(args).UseSerilog((context, logger) => //注册Serilog

logger.ReadFrom.Configuration(context.Configuration);

logger.Enrich.FromLogContext;

hostBuilder.ConfigureServices((ctx, services) =>

services.AddSingleton<MainWindow>;

services.AddSingleton<MainWindowViewModel>;

returnhostBuilder;

tips :记得把App.xaml中的StartUpUri删除掉net framework 2 0 。

那么如何使用呢net framework 2 0 ?

我们可以在需要注入的地方通过构造器注入net framework 2 0 ,比如我们的MainWindowViewModel是需要绑定到MainWindow的上下文对象上的,我们可以这样做:

publicpartialclassMainWindow: Window

publicMainWindow( MainWindowViewModel viewModel)

InitializeComponent;

DataContext = viewModel;

这样程序在实例化MainWindow的时候就会从容器中取到MainWindowViewModel实例放到构造中,不需要我们关心如何去new这样一个对象net framework 2 0 。

我们还在App.cs中放了一个静态的ServiceProvider存储ServiceProvider的实例net framework 2 0 ,方便我们全局使用,这是因为有的地方我们不方便构造器的依赖注入,我们就可以利用该对象使用依赖查找的办法获取对象实例:

ServiceProvider.GetRequiredService < MainWindowViewModel> ; Configuration

如何按照上面做的我们在WPF启动的时候注册一个默认的Hostnet framework 2 0 ,那么也会将配置模块带入到项目中,我们如何使用配置模块?我们可以在项目根目录下创建一个appsettings.json文件,并且右键->属性

设置成这样

这样我们就可以使用.net自带的IConfiguration进行配置文件的读取net framework 2 0 。

这个IConfiguration也是可以通过构造方法注入的net framework 2 0 ,我们想在程序里或者配置文件里这个节点的配置就可以如下操作:

.NET 5/6/7 中 WPF 如何优雅的开发

当然了具体更多操作和用法,包括需要根据不同环境区分加载不同的配置以及不喜欢appsettings.json这个名字,想用其他名字都是可以配置的net framework 2 0 。

appsettings.json是他框架默认的配置文件名字,会去找根目录下这个文件,如果你没有配置成其他名字的话net framework 2 0 。

总结

目前为止我们只是介绍了几个方面的WPF的在.net core/5/6/7中的优雅用法net framework 2 0 。也是一个基础的搭建,当然只有一个良好的基础,一个低耦合,符合规范的基础才能hold住之后写代码天高任鸟飞的愿景哈哈哈哈。

我自己做的一个lol插件也是使用WPF做的,目前全网下载量破万,github star 180+,也是基于这些概念开发的,有兴趣的小伙伴可以了解也好,学习也好net framework 2 0 。

转自:BruceNeter

- EOF -

点击标题可跳转

.NET 跨平台框架选择之一 Avalonia UI

C#程序发布时net framework 2 0 ,一定要好好的保护,不然你会后悔的【带破解教程】

C# 开发的摸鱼背单词软件 ToastFish

看完本文有收获net framework 2 0 ?请转发分享给更多人

推荐关注「DotNet」net framework 2 0 ,提升.Net技能

点赞和在看就是最大的支持❤️

爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

何优雅NETWPF何优雅WPFnet framework 2 0
Win10“假死”:屏幕无反应,但是鼠标键盘能动 国自然热点文献分享之炎性小体(上)