登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
【翻译】MAUI 的.NET 11预览版:使用内联C#表达式简化XA ...
【翻译】MAUI 的.NET 11预览版:使用内联C#表达式简化XAML
[ 复制链接 ]
全跺俚
2 小时前
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
摘要
如果你的 MAUI UI 逻辑根本不需要转换器或额外的 ViewModel 属性会怎么样?.NET 11 预览版的 C# 表达式允许你直接在 XAML 中嵌入小型、安全、强类型的 C# 代码片段,以源代码生成的速度清理格式化、仅 UI 数学运算和条件语句。虽然仍处于实验阶段,但非常适合演示和早期探索。
为什么这个 .NET 11 预览功能在 MAUI 社区引起轰动
在 .NET MAUI 中设计干净的 UI 听起来很简单,但格式化文本、组合值或进行简单的 UI 计算通常会迫使我们:
创建一次性转换器
设置额外的 ViewModel 属性
使用笨拙的 StringFormat 技巧
对于像显示价格这样的小事情,这一切都感觉工作量太大了。但 .NET 11 通过名为
XAML 中的 C# 表达式
的新功能解决了这个问题。一个小变化却带来了巨大而令人兴奋的影响!
有了这个预览功能,你终于可以直接在 XAML 中编写简短、安全的 C# 表达式,无需转换器,无需样板代码,无需繁琐的仪式。
什么是“XAML 中的 C# 表达式”?
XAML 中的 C# 表达式让我们可以直接在绑定中嵌入简短的代码片段。我们可以直接在标记中表达最终的显示值,而不是将绑定与转换器配对。
该功能由 XAML 源代码生成器提供支持,它在构建时验证并从这些表达式生成强类型代码。这使得一切保持安全、快速和可读,同时让 XAML 感觉更加自然。
为什么这个功能非常重要
以下是在 XAML 中使用 C# 表达式的主要好处:
更快的入门
:初学者不需要学习转换器或额外的模式就能显示格式化的值。
更少的样板代码
:小型、仅视图的转换不会强制要求额外的 ViewModel 属性或一次性转换器。
更强的工具支持
:源代码生成带来了闪电般的编译时验证和比旧方法更高的性能提升。
这些超级能力共同使我们的 UI 代码感觉像我们在屏幕上想象的那样直观和生动。
何时使用它(以及何时不使用)
像任何工具一样,XAML 中的 C# 表达式在合适的场景中表现出色。
用于小型、表现层逻辑
:
格式化值(货币、日期等)
简单数学运算
字符串组合
基于布尔值切换视觉效果
避免用于复杂、可重用、业务关键逻辑
,包括:
定价规则
税务计算
需要单元测试或在多个屏幕上重用的逻辑
经验法则:如果逻辑不能一目了然,就将其移至 ViewModel 或域层。
熟悉语法
以下是一些反映日常 UI 场景的小例子,开发人员今天经常依赖转换器或额外的 ViewModel 属性。
1) 无需转换器的货币格式化
我们可以使用标准的 C# 格式化来格式化货币。它会根据设备或应用程序的区域设置显示本地化货币。
[/code][size=4]2) 直接在 UI 中显示计算的总计[/size]
对于基本总计,我们可以将逻辑直接放在标签旁边。
[code]
复制代码
3) 使用字符串插值构建用户友好的文本
我们可以直接在 XAML 中执行字符串插值,而不是在 ViewModel 中创建单独的属性。
[/code][size=4]4) 使用条件表达式表示状态[/size]
对于简单的 UI 状态,不再需要转换器。
[code]
复制代码
5) 条件样式也保持干净
我们还可以根据状态切换颜色。
[/code][size=5]迷你页面演练:之前 vs. 之后[/size]
想看看魔法吗?没有什么比比较经典页面和升级到 .NET MAUI 的 XAML 中 C# 表达式的页面更好的了。
[size=4]之前:有效,但增加了额外步骤[/size]
典型的 XAML 页面可能会以如下绑定开始:
[code]
复制代码
为了支持这一点,我们通常会引入纯粹为了格式化 UI 而存在的 ViewModel 属性。
public string DisplayText => $"{Quantity} × {ProductName}";
public decimal Total => Price * Quantity;
复制代码
之后:更简洁,更直接
使用 C# 表达式,我们可以直接在 XAML 中表达相同的逻辑,无需额外的 ViewModel 属性:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiApp"
x:
x:DataType="local:ProductViewModel">
<VerticalStackLayout Spacing="6" Padding="16">
<Label Text="{ProductName}"
FontAttributes="Bold"
FontSize="18" />
<Label Text="{$'{Price:C2}'}" />
<Label Text="{$'{Quantity} × {ProductName}'}" />
<Label Text="{$'Total: {Price * Quantity:C2}'}" />
<Label Text="Active"
IsVisible="{IsActive}"
TextColor="Green" />
<Label Text="Inactive"
IsVisible="{!IsActive}"
TextColor="Gray" />
</VerticalStackLayout>
</ContentPage>
复制代码
注意:
有关更多详细信息,请参考 .NET MAUI (.NET 11) 中 XAML C# 表达式的示例https://github.com/SyncfusionExamples/Csharp-Expressions-in-XAML--A-Beginner-Friendly-Leap-for-.NET-MAUI-in-.NET-11
这如何融入 MVVM
重要的是要强调,XAML 中的 C# 表达式是一种表现层便利,而不是 MVVM 或
ViewModel
的替代品。使用表达式进行简短、以 UI 为中心的转换。将业务逻辑、影响行为的计算和共享规则保留在
ViewModel
或域层中,以便它们可以被测试和重用。
它是否已经准备好投入生产?
在现阶段,该功能尚未准备好投入生产。它是实验性的,与
.NET 11 预览版
和
Xaml<MauiXamlInflator>SourceGen</MauiXamlInflator>
相关联。
这使得它非常适合学习、原型设计和内部演示。然而,对于面向客户的发布,最好等待稳定支持,除非你控制完整的部署环境并且对预览依赖项感到满意。
如何尝试它(初学者友好的设置)
如果你想安全地进行实验,请从小处着手并遵循以下步骤:
步骤 1:启用预览功能
使用 .NET 11 预览版并启用预览标签。
<EnablePreviewFeatures>true</EnablePreviewFeatures>
复制代码
请参考以下图片:
步骤 2:开启 XAML 源代码生成
接下来,确保启用了 XAML 源代码生成。此功能仅在活动的
Xaml<MauiXamlInflator>SourceGen</MauiXamlInflator>
时有效。
<MauiXamlInflator>SourceGen</MauiXamlInflator>
复制代码
步骤 3:为页面使用 x
ataType
优先使用带有
x
ataType
的编译绑定,以便表达式是强类型的,并且工具支持更好。
x:DataType="local:MainViewModel"
复制代码
步骤 4:从简单的表达式开始
最后,一次添加一个表达式。格式化值(如价格或标签)通常是最容易和最安全的开始地方。
.NET MAUI 的未来
XAML 中的 C# 表达式推动 MAUI 向更自然、以 C# 为中心的标记工作流程发展。通过减少样板代码并通过源代码生成启用编译时检查,开发人员体验变得更加清晰且不易出错。
随着 .NET 11 的发展,你可以期待此功能不断发展和稳定,可能成为开发人员在 .NET MAUI 中编写 XAML 的标准部分。
请参考以下图片:
常见问题
我可以在不启用 Xaml<MauiXamlInflator>SourceGen</MauiXamlInflator> 的情况下在 XAML 中使用 C# 表达式吗?
不可以。此功能仅在启用 Xaml<MauiXamlInflator>SourceGen</MauiXamlInflator> 时有效,因为表达式是通过源代码生成器处理和编译的。没有它,XAML 工具/解析器将无法理解或转换表达式。
此功能是否足够稳定,可以用于生产应用程序?
还没有。XAML 中的 C# 表达式目前是实验性的,与 .NET 11 预览版本相关联。它非常适合学习、演示和原型设计,但对于面向客户的生产应用程序,等待它获得官方支持并稳定下来会更安全。
C# 表达式是否会取代转换器或 MVVM 模式?
不会。它们旨在用于小型 UI 转换,如格式化、字符串插值或基本计算。转换器和 MVVM 对于可重用的转换、复杂逻辑和应该在屏幕之间测试和共享的业务规则仍然很重要。
我可以在 XAML 中的 C# 表达式内调用方法吗?
只有简单且安全的表达式才能正常工作。我们应该避免异步调用和多步操作。目的是保持 UI 逻辑轻量且可读,而不是将应用程序逻辑移到 XAML 中。
这些表达式会减慢我的应用程序吗?
通常不会。因为表达式是通过源代码生成器编译的。它们是强类型的,避免了经典绑定中常见的一些反射密集型行为。在大多数情况下,性能应该相等或更好,具体取决于页面和场景。
这是否适用于 x
ataType(编译绑定)?
是的。推荐使用
x
ataType
,因为它提高了类型安全性,启用了更好的编译时检查,并且在编写 XAML 时通常提供更好的 IntelliSense。
展望未来
非常感谢您的阅读!如果你正在深入研究 .NET MAUI,这确实是未来最令人兴奋的改进之一。XAML 中的 C# 表达式带来了兴奋、清晰度和一种令人难以置信的直观方式来塑造 UI 逻辑。随着 .NET 11 的发展,这个工具只会变得更加强大和变革性!
无论这是你的第一个 MAUI 项目还是你正在完善你的 UI 架构,这个添加都将为你的工作流程注入活力,使开发变得快速、干净且真正有意义!
原文地址
https://dev.to/syncfusion/net-11-preview-for-net-maui-simplify-xaml-with-inline-c-expressions-2k3j
出处:https://www.cnblogs.com/sesametech-netcore/本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
翻译
MAUI
NET
预览
使用
相关帖子
C#.NET MVC 前端JS的AES加密
.NET 本地Db数据库-技术方案选型
搭建一套.net下能落地的飞书考勤系统
使用语义化版本管理工程:告别版本混乱
一款基于 .NET Avalonia 开源、功能强大、跨平台的班级大屏课表展示系统
ai使用分享
如何使用 LiteLLM 网关代理统一管理你的大模型
SQLAlchemy中使用UPSERT
【项目实践】使用GNS3模拟三层架构中小型企业组网
.NET 10 & C# 14 New Features 新增功能介绍-.NET CLI工具改进
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
C#.NET MVC 前端JS的AES加密
2
489
阮蓄
2026-02-26
业界
.NET 本地Db数据库-技术方案选型
0
197
酒跚骼
2026-02-26
业界
搭建一套.net下能落地的飞书考勤系统
0
752
鄂缮输
2026-02-27
业界
使用语义化版本管理工程:告别版本混乱
1
521
石娅凉
2026-02-27
业界
一款基于 .NET Avalonia 开源、功能强大、跨平台的班级大屏课表展示系统
1
169
茹静曼
2026-02-27
业界
ai使用分享
0
934
任静柔
2026-02-27
业界
如何使用 LiteLLM 网关代理统一管理你的大模型
0
688
捡嫌
2026-02-27
业界
SQLAlchemy中使用UPSERT
0
256
侧胥咽
2026-02-28
安全
【项目实践】使用GNS3模拟三层架构中小型企业组网
0
2
嫁吱裨
2026-02-28
业界
.NET 10 & C# 14 New Features 新增功能介绍-.NET CLI工具改进
0
137
辉伫
2026-03-01
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
全跺俚
2 小时前
关注
0
粉丝关注
19
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9888
6
韶又彤
9910
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9876
10
遗憩
10006
查看更多
今日好文热榜
92
[CS:APP 3e] 关于对 第 12 章 读/写者的一
451
[20260228]如何实现字符串拆分输出数字序列
160
ABC447F题解
451
python字典切片、取前多少个、后多少个
357
基于 Lexical 实现变量输入编辑器
927
游戏服务端架构:消息流水线模型(有序而高
554
【翻译】MAUI 的.NET 11预览版:使用内联C#
465
AI渗透测试工具:从"脚本跑腿"到"Agent大脑
47
业务泳道流程图AIGC小试
306
3分钟搞懂深度学习AI:一条切片面包看懂AI
587
3分钟搞懂深度学习AI:什么是多层感知机?
899
论云原生架构在高并发系统中的设计与实践
791
老兵不死,只是换了战场:从27年的企业开发
860
工业AI报警插件
474
斯坦福大学竟然开了个 AI 编程课?!我已经
137
.NET 10 & C# 14 New Features 新增功能介
676
AI 到底有多聪明?——一份让 AI 研究者也
280
上海有哪些专业做运动仿真服务的公司?2026
157
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io
476
[LKD/Linux 内核] 关于对 current_thread_i