我有一个列表视图绑定到一个Observable Collection'People',People包含具有'Name'属性的人,它给了我一个人的表。
我想在此表的每一行都有一个删除按钮,显示在最后一列。以下是一个有效的实施。然而,处理程序和XAML是非常交织在一起的,这并不好。我怎么能通过我删除的那个人?
XAML:
<ListView ItemsSource="{Binding People}" Name="ListViewPeople">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumnHeader>Names</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Names}"></TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Click="Button_Click_Delete"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
我已设法使用此处理程序实现此功能,但正如您所看到的,这意味着支持代码必须详细了解该视图。这将获取从ListView按下的删除按钮的索引,并从我的可观察集合中删除该值。
c#code:
private void Button_Click_Delete(object sender, RoutedEventArgs e)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) && !(dep is ListViewItem))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null)
return;
int index = ListViewPeople.ItemContainerGenerator.IndexFromContainer(dep);
People.RemoveAt(index);
}
有没有办法可以将我已删除的observable集合的哪个成员传递给我的处理程序,以便处理程序不必知道有listview等?
答案 0 :(得分:5)
Button btn = (Button)sender;
People.Remove((Person)btn.DataContext);