微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin 形成 CarouselView:子元素并不总是被实例化

如何解决Xamarin 形成 CarouselView:子元素并不总是被实例化

我遇到了一个问题,我正在开发一个测验应用程序。长话短说,在之前的版本中,我使用了 Tabbedpage,但它没有满足我的所有期望。

所以我决定用 CarouselView 重写我的 UI。

在第一个问题中,当用户选择他的答案时,他的答案会突出显示(如果正确则为绿色,如果错误则为红色)。

但这是我的问题:当答案在问题 1 处突出显示时,不知何故问题 6 也在同一位置突出显示

<CarouselView x:Name="Carrousel" 
                          Loop="False" 
                          ItemsSource="{Binding FullQuestion}" 
                          IndicatorView="indicatorView"
                          >
                <CarouselView.ItemTemplate>
                    <DataTemplate>
                        <Grid x:Name="FirstGrid">
                            <Grid.RowDeFinitions>
                                <RowDeFinition Height="auto"/>
                                <RowDeFinition Height="0.3*"/>
                                <RowDeFinition Height="auto"/>
                                <RowDeFinition Height="0.3*"/>
                                <RowDeFinition Height="*"/>
                        </Grid.RowDeFinitions>
                            <Label x:Name="Question" Text="{Binding Name}" />
                            <views:MusicButtonView x:Name="MusicButtonView" Grid.Row="1" Margin="10" SongUrl="{Binding ID}" />
                            <Label x:Name="QuestionType" Grid.Row="2" Text="{Binding NameOfQuestion}" />
                        <Grid x:Name="ButtonGrid" Grid.Row="4">
                            <Grid.RowDeFinitions>
                                <RowDeFinition Height="*"/>
                                <RowDeFinition Height="*"/>
                                <RowDeFinition Height="*"/>
                                <RowDeFinition Height="*"/>
                            </Grid.RowDeFinitions>
                            <Button Grid.Row="0" x:Name="btn1" Text="{Binding Lines[0].songName}" Clicked="OnBtnClick" BackgroundColor="#998A8B8D" BorderColor="White" CornerRadius="1" BorderWidth="2"/>
                            <Button Grid.Row="1" x:Name="btn2" Text="{Binding Lines[1].songName}" Clicked="OnBtnClick" BackgroundColor="#998A8B8D" BorderColor="White" CornerRadius="1" BorderWidth="2"/>
                            <Button Grid.Row="2" x:Name="btn3" Text="{Binding Lines[2].songName}" Clicked="OnBtnClick" BackgroundColor="#998A8B8D" BorderColor="White" CornerRadius="1" BorderWidth="2"/>
                            <Button Grid.Row="3" x:Name="btn4" Text="{Binding Lines[3].songName}" Clicked="OnBtnClick" BackgroundColor="#998A8B8D" BorderColor="White" CornerRadius="1" BorderWidth="2"/>
                        </Grid>
                    </Grid>
                    </DataTemplate>
                </CarouselView.ItemTemplate>
            </CarouselView>
private void Process(QuestionFull data,int index,ref Button btn)
{
        var id = data.QuestionId;
        
        if(!data.IsAnswered)
        {
            btn.BackgroundColor = Color.FromHex("#998A8B8D");
        }

        if (data.ID.Equals(data.Lines[index].songId))
        {
            btn.BackgroundColor = Color.Fromrgb(0,213,33);
            data.IsCorrectAnswer = true;
        }
        else
        {
            btn.BackgroundColor = Color.Fromrgb(255,69,56);
            data.IsCorrectAnswer = false;
        }
        data.IsAnswered = true;
}

我的想法是 carouselview 重用该项目以节省内存。它有 5 个项目,然后重复使用它们? 有谁知道如何解决,或者如何增加唯一元素的数量

解决方法

CarouselView 基于 CollectionView,因此这种行为是正常的。

请看这条评论:XF CarouselView #9200 issue comment

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。