2012-02-18 5 views
1

Я в LongListSelector со следующим шаблоном элемента Event:обращения с LongListSelector и элемент списка с флажком

<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> 

И используется как следует:

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

Событие SelectionChanged:

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)); 
    } 

Чтобы изменить детали элемента, я подписал событие SelectionChanged для LongListSele т е р. Это работает так, как ожидалось.

Но если я поставлю флажок - сначала щелкнуло событие с флажком, но я не узнаю, какой флажок был выбран (свойство longlistselector.SelectedItem устарело) и сразу после того, как событие SelectionChanged было запущено и попытайтесь перейти к странице подробностей, как это происходит, если я намереваюсь это сделать.

Как я могу отделить их от событий, чтобы избежать стрельбы обоими? И как я могу получить соответствующий элемент данных?

Большое спасибо ...
С уважением, Дэнни

ответ

2

Вам не нужно прослушивать SelectionChanged событие. В Click, Checked или Unchecked обработчиком событий вы можете получить товар:

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)); 
} 
1

В вашем AlarmActivationClicked (обработчик событий на флажок), вы будете иметь возможность получить DataItem элемента в списке, который был щелчок.

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

Я не видя события метод AlarmListSelectionChanged вызывается после того, как метод AlarmActivationClicked называется. Если вы установите флажок, флажок изменится на отмеченный, но он не изменит выбор в списке.

 Смежные вопросы

  • Нет связанных вопросов^_^