[英]Xamarin forms CarouselView: child elements are not always instantiated
我面临一个问题,我正在开发一个测验应用程序。 长话短说,在之前的版本中,我使用了 Tabbedpage,但它并没有满足我的所有期望。
所以我决定用 CarouselView 重写我的 UI。
在第一个问题中,当用户选择他的答案时,他的答案会突出显示(如果正确则为绿色,如果错误则为红色)。
但这是我的问题:当答案在问题 1 处突出显示时,由于未知原因,问题 6 也在同一 position 处突出显示
<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 重用该项目以保存 memory。 它有 5 个项目,然后重复使用它们? 有谁知道如何解决它,或者如何增加独特元素的数量。
CarouselView
是基于CollectionView
的,所以这种行为是意料之中的。
请查看此评论: XF CarouselView #9200 问题评论
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.