Это простой пример того, как вы можете это сделать.Во-первых, исходный класс для ListBox.Простой класс, который реализует интерфейс INotifyPropertyChanged и одно строковое свойство.
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));
}
}
}
MainWindow имеет ObservableCollection MyClass.Мы устанавливаем DataContext для самого Window (this), это заставит ListBox наследовать DataContext, чтобы мы могли привязать его 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;
}
}
В xaml у нас есть ListBox, который привязывается к MyClasses.ItemTemplate для каждого ListBoxItem в ListBox, каждый элемент привязывается к своему экземпляру MyClass, представляет свойство MyString и кнопку «Удалить».DataContext для каждого ListBoxItem будет экземпляром 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>
Наконец, мы добавляем код позади EventHanlder для RemoveListBoxItem_Click в 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);
}
}