2010-10-27 3 views
3

ListBox avec ItemTemplate: SelectionChanged non déclenché Qu'est-ce qui ne va pas?ListBox avec ItemTemplate: SelectionChanged non déclenché

<ListBox ItemsSource="{Binding Source1}" SelectionChanged="ListBox_SelectionChanged" SelectedItem="{Binding CurrentItem, Mode=TwoWay}" HorizontalAlignment="Stretch" Margin="0" Padding="0"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid Margin="0"> 

       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition Height="1" /> 
       </Grid.RowDefinitions> 

       <Button Grid.Row="0" BorderThickness="0" Background="Transparent" HorizontalAlignment="Stretch"> 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="Click"> 
          <cmd:EventToCommand Command="{Binding FirstCommand}" PassEventArgsToCommand="True" /> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
        <Button.Template> 
         <ControlTemplate> 
          <Grid HorizontalAlignment="Stretch"> 

           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/> 
            <ColumnDefinition Width="65" /> 
            <ColumnDefinition Width="30"/> 
           </Grid.ColumnDefinitions> 

           <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Title}" Style="{StaticResource ListBoxTextStyle}" /> 
           <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Title1}" Margin="5,0" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center" /> 

          </Grid> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 

       <Border Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" BorderBrush="#FFFFFF" HorizontalAlignment="Stretch" BorderThickness="0,1,0,0" /> 

      </Grid> 

     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 

</ListBox> 

Répondre

3

Le ListBoxItem deviendrai sélectionné lorsque le ListBox reçoit un événement click. Cependant, un bouton à l'intérieur du modèle recevra et gérera l'événement click. Par conséquent, le ListBox ne peut pas voir l'événement.

Étant donné que vous appelez une commande sur le modèle de vue, envisagez d'utiliser le modèle de vue pour définir l'élément actuel comme élément sélectionné.

+0

Existe-t-il une autre solution? Voulez-vous dire, que j'ai besoin d'envoyer un message au ViewModel parent pour définir le SelectedItem? – SuperXMan

+0

Oui c'est ce que je veux dire. Votre utilisation de 'EventCommand' m'amène à la conclusion que vous préférez ne pas mettre de code dans votre vue. Il n'y a pas d'autre solution qui éviterait d'écrire plus de code et donné le choix de placer le code dans le ViewModel plutôt que dans la vue elle-même. – AnthonyWJones