我有listBox和ObservableCollection。 listBox.ItemSource(listNotify.ItemSource)设置为ObservableCollection(errosList)。 我遇到的问题是当用户点击带有来自listBox的内容x的按钮时,我不知道如何从errorsList中删除正确的元素。对于listBox的项目,我在stackPanel中使用ItemTemplate,在stackPanel中我有一个按钮。 Bellow是XAML代码:
<ListBox x:Name="listNotify">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="35">
<Image Height="16" Source="/Template;component/Resources/error.png" Stretch="Fill" VerticalAlignment="Top" Width="16"/>
<StackPanel Orientation="Vertical">
<HyperlinkButton Content="{Binding ErrorHeader}" HorizontalAlignment="Left" Height="16" Width="125"/>
<TextBlock Text="{Binding ErrorMessage}" HorizontalAlignment="Left" Width="405" d:LayoutOverrides="VerticalAlignment" />
</StackPanel>
<Button Content="x" Width="20" Height="20" Click="removeError_Click"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
代码来自silverlight 4项目。 感谢。
答案 0 :(得分:1)
private void removeError_Click(object sender, RoutedEventArgs e) {
FrameworkElement fe = sender as FrameworkElement;
if (null != fe) {
_observableCollection.Remove((YourType)fe.DataContext);
}
}
应该做你想要的。将YourType替换为您在ObservableCollectiion中声明的类型。
答案 1 :(得分:0)
您在errorsList-Collection的Items中是否有类似ID的属性?然后你可以使用Button的Tag-Property来实现这个目的:
<Button Content="x" Width="20" Height="20" Tag="{Binding ID}" Click="Button_Click" />
并在按钮的点击事件中:
string id = ((Button) sender).Tag.ToString();
var itemToRemove = errorsList.Where(x => x.ID == id).First();
errorsList.Remove(itemToRemove);
希望有所帮助