我有一个带有以下模板的 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 似乎正在缓存我的复选框的选中状态。如果我检查第一个项目,然后向下滚动到一半,在大约 30 个项目之后,我会看到另一个项目被选中,但我没有选择。其余的绑定工作。这就好像它忽略了模板中的“IsChecked”属性。我尝试将 IsChecked 属性绑定到属性,但没有成功。
有谁知道这是否是一个错误,如果不是,我该如何纠正这种行为?
Thanks!
不是一个错误,尽管一开始它可能看起来像一个错误。你看到的是ui虚拟化的效果,基本上LongListSelector回收了数据模板而不是创建新的来提高性能。回收的一个已知副作用是,如果您的数据模板包含维护其自身状态的控件(例如 CheckBox),则该状态将延续到新项目。
要解决此问题,您需要在外部(即视图模型中)管理控件状态。在您的特定情况下,CheckBox 的 IsChecked 属性必须绑定到视图模型的属性。并确保使用双向绑定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)