WP8 LongListSelector在单击CheckBox时触发SelectionChanged事件

时间:2013-01-29 20:57:48

标签: wpf xaml windows-phone-8

我有一个用于新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事件上导航。我只想要选中复选框或取消选中复选框。我如何实现这一目标?

2 个答案:

答案 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事件处理实现它。