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

绑定ObservableCollection的ListView添加项时出现无效转换异常

ListView绑定ObservableCollection添加项时抛出“指定的转换无效”异常,CollectionView却正常工作的原因?

向绑定到ListView的ObservableCollection中添加项时,抛出“指定的转换无效”异常,但将同一数据源绑定到CollectionView时可正常工作,相关代码如下:

ObservableCollection定义

public ObservableCollection<Category> SearchCategoriesResults { get; set; } = new();

ListView的XAML代码

<ListView ItemsSource="{Binding SearchCategoriesResults}"
          BackgroundColor="{StaticResource Primary}"
          SeparatorVisibility="None"
          WidthRequest="250"
          RowHeight="30"
          HeightRequest="150">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="model:Category">
            <Label Text="{Binding Name}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

触发异常的代码

public void SearchCategories()
{
    SearchCategoriesResults.Clear();
    try
    {
        //测试用的任意数据
        SearchCategoriesResults.Add(new Category { Id = 15, Name = "Name" });
    }
    catch(Exception ex)
    {
        //异常信息:指定的转换无效
        Debug.WriteLine(ex.Message);
    }
}

正常工作的CollectionView代码

<CollectionView ItemsSource="{Binding SearchCategoriesResults}"
            SelectionMode="Single"
            SelectedItem="{Binding SearchCategoriesSelectedResult, Mode=TwoWay}"
            HeightRequest="120"
            WidthRequest="250">
    <CollectionView.EmptyView>
        <StackLayout Padding="50">
            <Label TextColor="White"
                    FontAttributes="Bold"
                    HorizontalOptions="CenterAndExpand"
                    Text="NO DATA"
                    VerticalOptions="CenterAndExpand" />
        </StackLayout>
    </CollectionView.EmptyView>
    <CollectionView.ItemsLayout>
        <LinearItemsLayout Orientation="Vertical" />
    </CollectionView.ItemsLayout>

    <CollectionView.ItemTemplate>
        <DataTemplate x:DataType="model:Category">
            <Grid HeightRequest="40"
                Margin="5,3,5,3"
                Padding="5,0,5,0"
                ColumnDefinitions="*"
                RowDefinitions="*,*"
                BackgroundColor="{StaticResource Secondary}">

                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroup Name="CommonStates">
                        <VisualState Name="Selected">
                            <VisualState.Setters>
                                <Setter Property="BackgroundColor" Value="{StaticResource Fourth}" />
                            </VisualState.Setters>
                        </VisualState>
                        <VisualState Name="Normal">
                            <VisualState.Setters>
                                <Setter Property="BackgroundColor" Value="{StaticResource Secondary}" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>
                <Label Grid.Row="0" TextColor="White" Text="{Binding Name}" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" />
            </Grid>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

不清楚为何CollectionView可正常工作而ListView不行,请问原因是什么?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:20:58