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

MAUI ListView绑定ObservableCollection<Type>报错:值不在预期范围内

问题分析与解决办法

问题根源

Windows平台的ListView没有内置对Type类型的默认渲染逻辑,直接绑定ObservableCollection<Type>时,控件无法正确解析该类型对象,触发“Value does not fall within the expected range”异常。而Android平台的ListView默认会调用对象的ToString()方法生成显示内容,因此能正常运行。

解决步骤

给绑定Types的ListView添加自定义ItemTemplate,明确指定要展示的Type属性即可:

修改后的View代码:

<Grid RowDefinitions="1*,1*">
    <ListView ItemsSource="{Binding Items}" />
    <ListView ItemsSource="{Binding Types}" Grid.Row="1">
        <ListView.ItemTemplate>
            <DataTemplate>
                <!-- 显示类型名称 -->
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

可选渲染方式

  • 若要显示包含命名空间的完整类型名,绑定FullName属性:
    <TextBlock Text="{Binding FullName}" />
    
  • 若要直接使用Type.ToString()的输出(如System.Int32),可以直接绑定对象本身:
    <TextBlock Text="{Binding}" />
    

额外说明

问题并非出在CommunityToolkit.MVVM的绑定逻辑上,而是不同平台ListView的默认模板行为差异导致——Windows端控件无法处理非基础类型的对象渲染,必须显式定义渲染规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:12:18