升级Visual Studio 17.3.0 Preview 2后.NET MAUI数据绑定失效问题
.NET MAUI 升级后属性绑定失效修复
你的问题由两个明确的问题叠加导致,Command能正常执行但属性UI不更新是这类问题的典型特征:
- 第一处错误是
MauiProgram.cs中重复调用了UseMauiApp<App>()
你在初始化时先写了builder.UseMauiApp<App>().UseMauiCommunityToolkit();,后续配置字体时又调用了一次UseMauiApp<App>()。重复执行该方法会重置MAUI核心UI管线的事件转发链路,其中就包含PropertyChanged事件到UI刷新的绑定逻辑。Command绑定不受影响是因为点击事件是控件实例化时一次性挂载的,而属性变更监听是随管线初始化注册的,第二次调用UseMauiApp会把之前注册的监听全部覆盖。
修正后的MauiProgram配置:public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); // 仅调用一次UseMauiApp,链式拼接所有扩展配置 builder .UseMauiApp<App>() .UseMauiCommunityToolkit() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); // DI注册逻辑无需修改 builder.Services.AddSingleton<MainPageViewModel>(); builder.Services.AddSingleton<MainPage>(); return builder.Build(); } - 第二处是版本兼容问题:你当前引用的
Microsoft.Toolkit.Mvvm是旧版命名的包,该包已经正式迁移为CommunityToolkit.Mvvm。VS 17.3 Preview 2附带的新版MAUI绑定引擎调整了事件识别逻辑,旧包中ObservableObject触发的PropertyChanged事件不会被引擎正确接收。
修复步骤:- 卸载项目中所有
Microsoft.Toolkit.Mvvm相关的NuGet包 - 安装对应版本的
CommunityToolkit.Mvvm包 - 替换ViewModel中的命名空间引用:
// 删除旧引用 // using Microsoft.Toolkit.Mvvm.Input; // using Microsoft.Toolkit.Mvvm.ComponentModel; // 替换为新命名空间 using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.ComponentModel; - 卸载项目中所有
额外注意:Preview版本的VS增量编译存在已知的绑定缓存问题,修改完上述代码后,先手动删除项目的bin、obj文件夹,再重新编译部署,避免旧缓存导致修复不生效。如果需要快速验证绑定链路是否恢复,可以临时给IsVisible绑定加上
Mode=TwoWay参数,强制双向绑定检测。
内容的提问来源于stack exchange,提问作者bsimml
相关产品推荐
相关产品推荐

