我有一个用于新Windows Phone 8 LongListSelector的简单数据模板,如下所示:
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,-6,0,-10">
<CheckBox x:Name="ToDoCheckBox" Margin="0" IsChecked="{Binding ItemIsComplete}" Checked="ToDoCheckBox_Checked"/>
<TextBlock Text="{Binding ItemName}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeExtraLarge}"/>
</StackPanel>
</DataTemplate>
模板中还有一些项目,这就是为什么没有使用CheckBox的内容属性。
现在,我在SelectionChanged事件上实现了页面导航。问题是,即使单击CheckBox,SelectionChanged甚至会被触发。早期的问题似乎正在讨论完全相反的问题。我不希望激发SelectionChanged。或者,至少我不希望页面在CheckBox事件上导航。我只想要选中复选框或取消选中复选框。我如何实现这一目标?
答案 0 :(得分:0)
选择是触发导航的不良方式。如果不深入研究,可以在点击模板中的其他项目时通过触发导航来避免这种情况 e.g。
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,-6,0,-10">
<CheckBox x:Name="ToDoCheckBox" Margin="0" IsChecked="{Binding ItemIsComplete}" Checked="ToDoCheckBox_Checked"/>
<TextBlock Text="{Binding ItemName}"
TextWrapping="NoWrap"
Style="{StaticResource PhoneTextExtraLargeStyle}"
FontSize="{StaticResource PhoneFontSizeExtraLarge}"
Tap="TriggerNavigationToThisItem"/>
</StackPanel>
</DataTemplate>
以上假设您有一个名为TriggerNavigationToThisItem
的事件将触发导航。您还可以在Item上添加命令并绑定到该项以触发导航。
如果你有一个更复杂的模板,你可以将它们封装在一个容器中(比如Grid
),然后触发导航。
答案 1 :(得分:0)
您可以查看每个选择更改事件的原始来源。如果是复选框 - 只需跳过执行。
另外。根本不要使用本机“LongListSelector.Selected”属性和选择事件。它完全没有可伸缩性(例如用于多选)。使用您自己的Tap事件处理实现它。