gpt4 book ai didi

silverlight - 为什么 WP8 LongListSelector 会错误地重用 CheckBox 的 Checked 状态?

转载 作者:行者123 更新时间:2023-12-04 02:47:52 25 4
gpt4 key购买 nike

我有一个带有以下模板的 WP8 LongListSelector:

    <DataTemplate x:Key="ItemTemplate">
<Grid Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<controls:BlockImageControl
Grid.Column="0"
Width="110"
Height="110"
Background="Transparent" />
<TextBlock x:Name="Name"
Grid.Column="1"
Text="{Binding ScreenName}"
FontSize="{StaticResource PhoneFontSizeLarge}"
FontWeight="Bold"
VerticalAlignment="Center"/>
<CheckBox x:Name="Unblock" Grid.Column="2" VerticalAlignment="Center"
Tap="BlocksList_Tap"
IsChecked="false"
/>
</Grid>
</DataTemplate>

如您所见,每个单元格项目的末尾都有一个复选框,使用户可以选择多个项目。 IsChecked 默认为 false。

问题是 LongListSelector 似乎正在缓存我的复选框的 Checked 状态。如果我检查第一个项目,然后中途向下滚动,大约 30 个项目后,我会看到另一个我没有选择的项目被选中。其余的绑定(bind)工作。就好像它忽略了模板中的“IsChecked”属性。我尝试将 IsChecked 属性绑定(bind)到属性,但没有运气。

有谁知道这是否是一个错误,如果不是,我该如何纠正这种行为?

谢谢!

enter image description here

最佳答案

不是一个错误,虽然它一开始可能看起来像一个错误。你看到的是ui虚拟化的效果,基本上LongListSelector回收数据模板而不是创建新的模板来提高性能。回收的一个已知副作用是,如果您的数据模板包含保持自己状态的控件,例如 CheckBox,则该状态将延续到新项目。

要解决这个问题,您需要在外部管理控制状态,即在 View 模型中。在您的特定情况下, CheckBox 的 IsChecked 属性必须绑定(bind)到 View 模型的属性。并确保使用双向绑定(bind)。

关于silverlight - 为什么 WP8 LongListSelector 会错误地重用 CheckBox 的 Checked 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com