Hier ist eine Möglichkeit, dieses Problem anzugehen. Erstellen Sie eine ObservableCollection und setzen Sie ItemsSource gleich mit dieser Collection. Dann kann Ihr Button-Klick-Handler das Element einfach entfernen.
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);
}
}
}
In diesem Beispiel würde Ihre XAML wie folgt aussehen:
<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>