You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 9使用Community Toolkit Popup报错:找不到指定方法

问题分析与解决办法

问题原因

  1. 版本兼容性不匹配
    Community Toolkit Maui 11.1.0是针对.NET 8开发的,而你使用的是.NET 9,两者内部API存在差异,导致找不到PropertyPropagationExtensions.PropagatePropertyChanged方法——这个方法在.NET 9的MAUI中已被修改或移除,旧版本Toolkit未适配该变更。

  2. 服务注册错误
    你在MauiProgram.cs中注册的builder.Services.AddTransient<MsgBox, MsgViewModel>()完全错误:AddTransient的泛型参数要求第一个是服务类型,第二个是实现类型,但MsgBox是Popup页面,MsgViewModel是视图模型,两者没有继承/实现关系,这种错误注册会导致依赖注入逻辑混乱,间接引发运行时错误。

  3. 自动关闭逻辑无效
    DisplayPopup方法中Task.Delay(del)没有使用await,代码会跳过等待直接执行popup.Close(),导致Popup刚创建就被关闭,根本无法正常显示。

解决办法

1. 升级Community Toolkit Maui版本

将Community Toolkit Maui升级到适配.NET 9的版本(12.0.0及以上),可以通过NuGet包管理器更新,或者直接修改项目文件:

<PackageReference Include="CommunityToolkit.Maui" Version="12.0.0" />

2. 修正服务注册

删除错误的注册语句,若需要注册视图模型,改为:

builder.Services.AddTransient<MsgViewModel>();

如果你的MsgBox是手动实例化(如当前代码中new MsgBox(txt)),也可以完全移除该视图模型的注册,直接在MsgBox构造中手动创建ViewModel即可。

3. 修复自动关闭逻辑

将DisplayPopup改为异步方法,并添加await等待延迟:

public async Task DisplayPopup(string txt = "Success!", int del = 1000)
{
    var popup = new MsgBox(txt);
    this.ShowPopup(popup);
    await Task.Delay(del);
    popup.Close();
}

调用时也要使用await:

await DisplayPopup("Username is copied.", 750);

内容的提问来源于stack exchange,提问作者Bob Gatto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:33:10