2009-12-24 6 views
3

La fonctionnalité que je souhaite est d'avoir un bouton de suppression à côté de chaque élément d'une liste afin que lorsque l'utilisateur clique dessus, cet élément spécifique soit retiré de la liste.Silverlight: Evénements dans datatemplate pour les listboxes

Je songe à le mettre dans le gabarit de données, mais comment pourrais-je le mettre dans le même panier?

Merci, Shawn Mclean

Répondre

2

Voici une façon d'aborder ce problème. Créez un ObservableCollection et définissez ItemsSource égal à cette collection. Votre gestionnaire de clic de bouton peut alors simplement supprimer l'élément.

using System; 
using System.Collections.ObjectModel; 
using System.Windows.Controls; 

namespace SilverlightApplication1 
{ 
    public partial class MainPage : UserControl 
    { 
     private ObservableCollection<string> _customers; 

     public MainPage() 
     { 
      InitializeComponent(); 

      _customers = new ObservableCollection<string>() { "Bob", "Mark", "Steve" }; 
      this.DataContext = _customers; 
     } 

     public void remove_Click(object sender, EventArgs e) 
     { 
      var button = sender as Button; 
      if (button == null) 
       return; 

      var name = button.DataContext as string; 
      if (string.IsNullOrEmpty(name)) 
       return; 

      _customers.Remove(name); 
     } 
    } 
} 

Dans cet exemple votre XAML ressemblerait à ceci:

<Grid x:Name="LayoutRoot"> 
    <ListBox ItemsSource="{Binding}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" > 
        <TextBlock Text="{Binding}" /> 
        <Button Content="Remove" Click="remove_Click" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 
1

Bind ItemsSource de votre ListBox à ObservableCollection. Placez un bouton de suppression dans le modèle de données. gestionnaire d'événements Click pour le bouton peut être quelque chose comme ceci:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var button = sender as Button; 
    if (button != null) 
    { 
     var yourObject = button.DataContext as YourObject; 
     if (yourObject != null) 
     { 
      YourObjectsObservableCollection.Remove(yourObject); 
     } 
    } 
} 

vous pouvez donc récupérer l'objet qui est lié à ListBoxItem de boutons DataContext.

Questions connexes