0

0

MAUI怎么共享代码给WPF MAUI与WPF代码复用

畫卷琴夢

畫卷琴夢

发布时间:2026-01-09 10:58:02

|

277人浏览过

|

来源于php中文网

原创

MAUI和WPF不能共享UI层代码,但业务逻辑、数据模型、服务等非UI代码可复用;需通过.NET 6+类库隔离分层,ViewModel遵循MVVM且不依赖UI框架,数据访问与服务通过接口+DI实现跨平台兼容。

maui怎么共享代码给wpf maui与wpf代码复用

MAUI 和 WPF 是两个独立的 UI 框架,**不能直接共享 UI 层代码**(比如 XAML 页面、控件逻辑),但**业务逻辑、数据模型、服务、工具类等非 UI 代码完全可以复用**。关键在于项目结构设计和分层隔离。

核心原则:把可复用的部分抽离到 .NET Standard 或 .NET 6+ 类库

MAUI(.NET 6+)和 WPF(.NET 6+)都支持面向 .NET Standard 2.1 或更推荐的 .NET 6 及以上类库(net6.0 / net7.0 / net8.0)。只要不引用任何 UI 相关的命名空间(如 Microsoft.MauiSystem.Windows),就能被两边共用。

  • 新建一个 Class Library(.NET 6) 项目(例如 MyApp.Core
  • 把 ViewModel、Model、Repository、HttpClient 封装、DTO、Extensions、INotifyPropertyChanged 实现等放进去
  • MAUI 项目和 WPF 项目都通过 ProjectReference 引用它
  • 确保该类库的 net6.0 或更高(兼容两者)

ViewModel 层可以 100% 复用(推荐 MVVM)

只要 ViewModel 不依赖 UI 框架(比如不用 DispatcherApplication.CurrentNavigation 等),它在 MAUI 和 WPF 中行为一致。

  • INotifyPropertyChanged + 手动触发或用 CommunityToolkit.Mvvm 的 [ObservableProperty]
  • 命令用 ICommandRelayCommand(来自 Toolkit),WPF 和 MAUI 都支持绑定
  • 避免在 ViewModel 里写导航逻辑(如 Shell.GoToAsyncNavigationService.Navigate),改用事件或回调通知宿主页面处理

共享数据访问与服务(如 API 调用、本地存储)

HTTP 客户端、JSON 序列化、SQLite 封装、设置管理等,只要不调用平台特定 API,就能共用。

雪鸮AI
雪鸮AI

高效便捷的智能绘图辅助工具,一键生成高质量效果图。

下载
  • 定义统一接口(如 IDataServiceISettingsService)放在共享类库中
  • 具体实现(如基于 HttpClient 的 API 客户端)也放共享库 —— HttpClient 在 .NET 6+ 是跨平台的
  • 平台差异部分(如 WPF 用 IsolatedStorage,MAUI 用 Preferences)通过依赖注入在各自 UI 项目中注册实现

小技巧:用条件编译处理极少数平台差异

极个别场景(比如日志写入路径、临时文件夹)需要区分平台,可用 #if处理器指令,但要克制使用:

  • 在共享项目中添加 DefineConstants,例如 WPF 项目加 WPF,MAUI 项目加 MAUI
  • 代码中:#if WPF ... #elif MAUI ... #endif
  • 仅用于常量、简单路径拼接等轻量逻辑;复杂逻辑仍建议用接口 + DI

基本上就这些。不复杂,但容易忽略分层边界 —— 记住:UI 是不可共享的,其余大都可以。从第一天就建好 Core 类库,后面扩展 WinForms、Android 或 iOS 也会很轻松。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

408

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

723

2023.08.22

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1007

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

57

2025.10.17

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

3

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 11.2万人学习

Java 教程
Java 教程

共578课时 | 44.1万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号