2010-03-28 1 views
1

Dans mon projet Silverlight 3, j'utilise un contrôle ListBox pour afficher les résultats d'une opération Get() à partir d'un WebService WCF.Modifier l'article d'un ListBox à partir d'un bouton dans son modèle?

modèle d'élément de la zone de liste est la suivante:

<ListBox x:Name="m_listview" ItemsSource="{Binding Users, Mode=TwoWay, UpdateSourceTrigger=Default}" Foreground="{StaticResource EnergyBlue}" Background="{StaticResource EnergyBackground}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center" Grid.ColumnSpan="3" Margin="0,0,0,2" IsSynchronizedWithCurrentItem="False"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid MinWidth="536" MinHeight="10" d:DesignWidth="19.875" d:DesignHeight="20.75"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="0.2*"/> 
          <ColumnDefinition Width="0.2*"/> 
          <ColumnDefinition Width="0.2*"/> 
          <ColumnDefinition Width="0.2*"/> 
          <ColumnDefinition Width="0.2*"/> 
         </Grid.ColumnDefinitions> 
         <TextBox Text="{Binding Path=UserName, Mode=TwoWay, UpdateSourceTrigger=Default}" Grid.Column="0" Foreground="{StaticResource EnergyWhite}" Margin="2" Background="{StaticResource EnergyBackground}" BorderBrush="{StaticResource EnergyBlue}" SelectionBackground="{StaticResource EnergyBlue}" SelectionForeground="{StaticResource EnergyWhite}" MinWidth="100"/> 
         <PasswordBox Password="{Binding Path=UserPass, Mode=TwoWay, UpdateSourceTrigger=Default}" Grid.Column="1" Foreground="{StaticResource EnergyWhite}" Margin="2" Background="{StaticResource EnergyBackground}" BorderBrush="{StaticResource EnergyBlue}" SelectionBackground="{StaticResource EnergyBlue}" SelectionForeground="{StaticResource EnergyWhite}" MinWidth="100"/> 
         <TextBox Text="{Binding Path=UserTypeId, Mode=TwoWay, UpdateSourceTrigger=Default}" Grid.Column="2" Foreground="{StaticResource EnergyWhite}" Margin="2" Background="{StaticResource EnergyBackground}" BorderBrush="{StaticResource EnergyBlue}" SelectionBackground="{StaticResource EnergyBlue}" SelectionForeground="{StaticResource EnergyWhite}" MinWidth="100"/> 
         <Button Style="{StaticResource EnergyGlassButton}" Grid.Column="3" MinWidth="10" MinHeight="10" Content="Update" Click="OnUpdateUser"/> 
         <Button Style="{StaticResource EnergyGlassButton}" Grid.Column="4" MinWidth="10" MinHeight="10" Content="Remove" Click="OnRemoveUser"/> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Le modèle contient 2 boutons. Lorsque je clique sur l'un d'entre eux, je voudrais obtenir une référence à l'élément de données exact sous le listboxitem. Comment je fais ça? J'ai essayé:

User target_user = m_listview.SelectedItem as User; 

, mais il est apparu que l'élément listview n'a pas été sélectionné. Peut-il être fait sans réellement sélectionner l'élément listview? Par exemple, il suffit de cliquer sur le bouton "Supprimer" et faire disparaître la ligne?

Meilleures salutations

Répondre

2

je crois que le suivant doit récupérer l'élément dont vous avez besoin: -

void OnUpdateUser(object sender, RoutedEventArgs e) 
{  
    object item = ((Button)sender).DataContext; 
    // do stuff with item 
} 
+0

en effet. a fonctionné comme un charme – Maciek

+0

Question rapide qui est apparue dans ma tête: Et si cette ListBox aurait été un élément d'un ModelView, et le bouton serait attaché à une commande ICommand? Comment cela devrait-il fonctionner alors? – Maciek

Questions connexes