Frage

Ich habe einen LonglistSelector mit der folgenden Elementvorlage:

    <DataTemplate x:Key="stopItemTemplate">
        <Grid Margin="{StaticResource PhoneTouchTargetOverhang}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <CheckBox VerticalAlignment="Top" HorizontalAlignment="Left" IsChecked="{Binding Checked}" Click="AlarmActivationClicked" />
            <StackPanel Grid.Column="1" VerticalAlignment="Top">
                <TextBlock Text="{Binding Stop.Name}" Style="{StaticResource PhoneTextLargeStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" TextWrapping="Wrap" Margin="12,-12,12,6"/>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Distanz:" Style="{StaticResource PhoneTextSmallStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" Width="120"/>
                    <TextBlock Text="{Binding Distance, Converter={StaticResource MyStringFormatConverter}, ConverterParameter=:1000:\{0:0.0\} km}" Style="{StaticResource PhoneTextSmallStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Alarm:" Style="{StaticResource PhoneTextSmallStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" Width="120"/>
                    <TextBlock Text="{Binding Alarm, Converter={StaticResource MyBooleanStringConverter}}" Style="{StaticResource PhoneTextSmallStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Vibration:" Style="{StaticResource PhoneTextSmallStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" Width="120"/>
                    <TextBlock Text="{Binding Vibration, Converter={StaticResource MyBooleanStringConverter}}" Style="{StaticResource PhoneTextSmallStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}"/>
                </StackPanel>
            </StackPanel>
        </Grid>
    </DataTemplate>

Und verwendet wie folgt:

<controls:PivotItem Header="ziele">
    <toolkit:LongListSelector x:Name="alarmList" Background="Transparent" IsFlatList="True"
        ItemTemplate="{StaticResource stopItemTemplate}" SelectionChanged="AlarmListSelectionChanged" />
</controls:PivotItem>

Die Selektionsverkämpfung: Ereignis:

    private void AlarmListSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var guid = ((AlarmItem)alarmList.SelectedItem).Id;
        NavigationService.Navigate(new Uri(string.Concat("/AlarmDetailPage.xaml?id=", guid), UriKind.Relative));
    }

Um die Details eines Elements zu ändern, habe ich das Selection -Change -Ereignis des LonglistSelectors abonniert. Das funktioniert wie erwartet.

Wenn ich jedoch auf das Kontrollkästchen tippe - zunächst das geklickte Ereignis des Kontrollkästchens abgefeuert. Ich erkenne jedoch nicht, auf welches Kontrollkästchen erklickt wurde (die Eigenschaft longlistSelector.SelectedItem ist alt) und kurz nach dem aus Selection Changed Ereignis abgefeuert und versucht zu navigieren Auf die Detailseite wie ist es passiert, wenn ich das beabsichtige.

Wie kann ich diese von Ereignissen trennen, um zu vermeiden, dass beide abgefeuert werden? Und wie kann ich das entsprechende Datenelement erhalten?

Danke vielmals...
Freundliche Grüße, Danny

War es hilfreich?

Lösung

Sie müssen nicht hören SelectionChanged Veranstaltung. Im Click, Checked oder Unchecked Event -Handler Sie können einen Artikel erhalten:

private void CheckBox_Checked(object sender, System.Windows.RoutedEventArgs e)
{
    var guid = ((sender as CheckBox).DataContext as AlarmItem).Id;
    NavigationService.Navigate(new Uri(string.Concat("/AlarmDetailPage.xaml?id=", guid), UriKind.Relative));
}

Andere Tipps

In Ihrem AlarmactivationClicked (Ereignishandler im Kontrollkästchen) können Sie das Dataitem des Elements in der Liste erhalten, auf die Sie klicken.

    private void AlarmActivationClicked(object sender, RoutedEventArgs e)
    {
        var dataItem = ((FrameworkElement)sender).DataContext;
    }

Ich sehe nicht, dass die Ereignis -AlarmlistSelection -Changed -Methode, die nach der Alaraktivation aufgerufen wurde, aufgerufen wird. Wenn Sie auf das Kontrollkästchen klicken, ändert sich das Kontrollkästchen an die Überprüfung, ändert jedoch nicht die Auswahl im Liste der Liste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top