0

我有一个新的 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 的 content 属性的原因。

现在,我在 SelectionChanged 事件上实现了页面导航。问题是,即使单击 CheckBox,SelectionChanged 也会被触发。较早的问题似乎讨论了完全相反的问题。我不希望 SelectionChanged 被解雇。或者,至少我不希望页面在 CheckBox 事件上导航。我只想让复选框选中或未选中的事件。我该如何做到这一点?

4

2 回答 2

0

选择是触发导航的不好方法。无需深入研究,您可以通过在模板中的其他项目被点击时触发导航来避免这种情况。
例如

<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 上添加命令并绑定到该命令以触发导航。

如果您有一个更复杂的模板,您可以将它们封装在一个容器中(如 a Grid),然后让它触发导航。

于 2013-01-30T13:02:00.673 回答
0

您可以检查每个选择更改事件的原始来源。如果是复选框 - 只需跳过执行。

还。根本不要使用本机“LongListSelector.Selected”属性和选择事件。它完全没有可扩展性(例如多选)。使用您自己的 Tap 事件处理来实现它。

于 2013-01-30T15:46:28.147 回答