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

.NET MAUI绑定CollectionView时无法识别ObservableCollection嵌套属性

问题原因

该错误是几个常见的.NET MAUI XAML绑定低级错误叠加导致的,核心原因如下:

  1. 控件属性名写错:CollectionView用来绑定集合数据源的属性是*ItemsSource*,你写的Source是所有VisualElement都有的基础属性,根本不会触发集合项生成逻辑,此时DataTemplate内的绑定上下文根本不是你预期的MyModel实例,自然找不到对应属性。
  2. XAML语法错误:你所有的{Binding}标记扩展都没有用双引号包裹属性值,XAML解析器无法正确识别绑定表达式,会直接导致绑定失效。
  3. 类型定义可能存在缺陷:如果上述两个问题修正后还是报错,说明你的Vehicle类没有公开带公共get访问器的Make属性——MAUI绑定引擎只能识别公共实例属性,私有字段、内部属性、只写属性都会触发“属性未找到”错误。
  4. 额外注意:你贴的MyModel定义漏了class关键字,属于编译级错误,应该是粘贴代码时的笔误。
修复步骤

按顺序修正即可解决问题:

  • 修正C#类定义
    补全MyModel的类声明,同时确保Vehicle类正确公开Make属性:
    // MyModel补全class关键字
    public class MyModel
    {
        public string Name { get; set; }
        public Vehicle Car { get; set; } = new Vehicle();
    }
    
    // Vehicle类必须公开带公共get的Make属性
    public class Vehicle
    {
        public string Make { get; set; }
    }
    
  • 修正XAML绑定写法
    把错误的Source改为ItemsSource,所有绑定表达式用双引号包裹:
    <CollectionView ItemsSource="{Binding Data}">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <StackLayout>
                    <Label Text="{Binding Car.Make}" />
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
    
  • 检查页面绑定上下文
    确保页面的BindingContext被正确赋值为MyViewModel的实例,例如在页面构造函数中添加:
    public YourPage()
    {
        InitializeComponent();
        BindingContext = new MyViewModel();
    }
    
  • (可选)支持运行时值更新
    如果后续需要运行时修改Car实例或者Make属性的值并同步更新UI,给MyModel和Vehicle类实现INotifyPropertyChanged接口即可,你的BaseViewModel已经实现了该接口,直接继承复用逻辑就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:12:51