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
相关产品推荐
相关产品推荐

