Voici un exemple simple de ce que vous pouvez faire. Tout d'abord, la classe source pour le ListBox. Une classe simple qui implémente l'interface INotifyPropertyChanged et une propriété de chaîne.
public class MyClass : INotifyPropertyChanged
{
public MyClass(string myString)
{
MyString = myString;
}
private string m_myString;
public string MyString
{
get
{
return m_myString;
}
set
{
m_myString = value;
OnPropertyChanged("MyString");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
La MainWindow a une ObservableCollection de MyClass. Nous avons défini le DataContext pour la fenêtre sur lui-même (this), ce qui fera hériter le DataContext par ListBox afin que nous puissions lier ses ItemsSource à MyClasses.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyClasses = new ObservableCollection<MyClass>();
MyClasses.Add(new MyClass("My String 1"));
MyClasses.Add(new MyClass("My String 2"));
MyClasses.Add(new MyClass("My String 3"));
this.DataContext = this;
}
public ObservableCollection<MyClass> MyClasses
{
get;
private set;
}
}
En xaml, nous avons la ListBox qui se lie à MyClasses. Le ItemTemplate est pour chaque ListBoxItem dans le ListBox, chaque élément se liant à son instance de MyClass, présentant la propriété MyString et un "bouton Supprimer". Le DataContext pour chaque ListBoxItem sera une instance de MyClass.
<ListBox ItemsSource="{Binding MyClasses}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding MyString}" Margin="6"/>
<Button Content="Remove"
Click="RemoveListBoxItem_Click"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Enfin, nous ajoutons le code derrière EventHanlder pour RemoveListBoxItem_Click dans MainWindow.xaml.cs.
private void RemoveListBoxItem_Click(object sender, RoutedEventArgs e)
{
// The clicked Button
Button button = sender as Button;
// The DataContext of the Button will be its instance of MyClass
MyClass selectedItem = button.DataContext as MyClass;
if (selectedItem != null)
{
// Remove the MyClass item from the collection
MyClasses.Remove(selectedItem);
}
}