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

.NET Maui使用Community Toolkit在两个视图模型间传递对象后字段不显示的问题

.NET Maui使用Community Toolkit在两个视图模型间传递对象后字段不显示的问题

嘿,我仔细看了你的代码,问题其实出在QueryProperty的配置和跳转参数的键不匹配上,导致你传递的TermModel对象根本没正确绑定到EditTermViewModel的属性里,所以页面上的输入框和日期选择器自然显示不出内容。

咱们一步步捋:

  1. 先看你跳转到EditTermPage时的代码:
await Shell.Current.GoToAsync(nameof(EditTermPage), true, new Dictionary<string, object> { { nameof(TermModel), term } });

这里你用的参数键是nameof(TermModel),也就是字符串"TermModel",这个是传递时的标识。

  1. 再看EditTermViewModel上的QueryProperty:
[QueryProperty(nameof(TermModel), "Term")]

这里犯了两个小错:

  • 第一个参数应该是视图模型里用来接收对象的属性名,你写的是nameof(TermModel)(这是类型名,不是属性名),而你的ViewModel里由[ObservableProperty]生成的公共属性是Term;
  • 第二个参数是跳转时要匹配的键名,你写的是"Term",和跳转时用的"TermModel"完全对不上,系统找不到对应的参数,自然没法赋值。

修复方案很简单,修改EditTermViewModel的QueryProperty:

// 第一个参数是ViewModel里的属性名Term,第二个是跳转时用的键名TermModel
[QueryProperty(nameof(Term), nameof(TermModel))]
public partial class EditTermViewModel : BaseViewModel
{
    [ObservableProperty]
    private TermModel term;

    public EditTermViewModel() { }
}

另外再提醒你两个关键点:

  • 确保你的BaseViewModel继承了ObservableObject(Community Toolkit的ObservableProperty依赖这个基类实现属性变更通知,不然UI不会响应属性变化);
  • 检查你的TermModel类的属性都是public修饰的,不然UI控件没法绑定到私有属性上(看你代码里的绑定路径是Term.Title这类,应该没问题,但还是确认下更稳妥)。

你可以在EditTermViewModel的Term属性setter里加个断点,跳转后看看有没有值被传进来,这样就能快速验证修复是否生效啦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 06:59:49