C# 删除每个ListView行的按钮

C# 删除每个ListView行的按钮,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个绑定到可观察集合“People”的listview,People包含属性为“Name”的人员,这给了我一个人员表 我想为该表的每一行设置一个删除按钮,显示在最后一列。下面是一个工作实现。然而,处理程序和XAML是非常交织的,这是不好的。我如何传递已删除的成员 XAML: 是否有一种方法可以将我删除的可观察集合的哪个成员传递给我的处理程序,这样处理程序就不必知道是否存在listview等?尝试在DataContext上创建一个绑定,如DataContext=“{Binding}”,然后单击

我有一个绑定到可观察集合“People”的listview,People包含属性为“Name”的人员,这给了我一个人员表

我想为该表的每一行设置一个删除按钮,显示在最后一列。下面是一个工作实现。然而,处理程序和XAML是非常交织的,这是不好的。我如何传递已删除的成员

XAML:


是否有一种方法可以将我删除的可观察集合的哪个成员传递给我的处理程序,这样处理程序就不必知道是否存在listview等?

尝试在DataContext上创建一个绑定,如DataContext=“{Binding}”,然后单击检查DataContext中的内容。当您拥有该对象时,您可以删除它。您不知道命令和命令参数。尝试在DataContext上创建一个绑定,如DataContext=“{Binding}”,然后单击检查DataContext中的内容。当你拥有这个对象时,你可以删除它。你知道命令和命令参数吗..FrameworkElement btn=(FrameworkElement)sender;Remove((DocBeanInfoView)btn.DataContext);看起来很有意思。比我的实现好多了,谢谢。我对MVVM进行了更多的研究,它一点也不喜欢点击处理程序,所以我现在可能会使用它并坚持使用旧的方式。FrameworkElement btn=(FrameworkElement)sender;Remove((DocBeanInfoView)btn.DataContext);看起来很有意思。比我的实现好多了,谢谢。我对MVVM进行了更多的研究,它一点也不喜欢点击处理程序,所以我可能会使用它,现在还是沿用老方法。
Button btn = (Button)sender;
People.Remove((Person)btn.DataContext);
    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);
    }
Button btn = (Button)sender;
People.Remove((Person)btn.DataContext);