C# 如何从集合列表中删除项,并正确捕获CollectionChanged事件,并在其中执行某些操作

C# 如何从集合列表中删除项,并正确捕获CollectionChanged事件,并在其中执行某些操作,c#,wpf,datagrid,observablecollection,C#,Wpf,Datagrid,Observablecollection,我正在使用observable collection显示当前活跃客户的列表, 我在DataGrid中显示该列表,下面是我的列表的外观 public ObservableCollection<Company> list = new ObservableCollection<Company>(Controller.SelectAll()); 在此之后,我需要尽我所知捕捉删除操作上的CollectionChanged事件? 在这里,我想从数据库中删除该项,我想它可能是这样的:

我正在使用observable collection显示当前活跃客户的列表, 我在
DataGrid
中显示该列表,下面是我的列表的外观

public ObservableCollection<Company> list = new ObservableCollection<Company>(Controller.SelectAll());
在此之后,我需要尽我所知捕捉删除操作上的CollectionChanged事件? 在这里,我想从数据库中删除该项,我想它可能是这样的:

public partial class Companies : Window
{


        public ObservableCollection<Company> list = new ObservableCollection<Company>(Controller.SelectAll());

        public Companies()
        {
            InitializeComponent();


            list.CollectionChanged += (ss, ee) =>
            {
                if (ee.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove
                    && ee.OldItems != null && ee.OldItems.Count > 0)
                {
                    Company removedItem = ee.OldItems[0] as Company;
                    Controller.DeleteFromDatabaseById(removedItem.Id);

                }
            };

        }

        private void btnDeleteSelectedCustomer_Click(object sender, RoutedEventArgs e)
        {
            if (dtgMyCustomers.SelectedItem != null)
            {
            Company k = (Company)(dtgMyCustomers.SelectedItem);
            list.Remove(k);
            }
        }

}
公共部分类公司:窗口
{
public ObservableCollection list=新的ObservableCollection(Controller.SelectAll());
上市公司()
{
初始化组件();
list.CollectionChanged+=(ss、ee)=>
{
如果(ee.Action==System.Collections.Specialized.NotifyCollectionChangedAction.Remove
&&ee.OldItems!=null&&ee.OldItems.Count>0)
{
公司removedItem=ee.OldItems[0]作为公司;
Controller.DeleteFromDatabaseById(removedItem.Id);
}
};
}
私有无效BTNDelectedCustomer\u单击(对象发送者,路由目标)
{
如果(dtgMyCustomers.SelectedItem!=null)
{
公司k=(公司)(dtgMyCustomers.SelectedItem);
删除(k);
}
}
}
但不幸的是,我做了一些错误的事情,因为当我在我的按钮单击事件中从数据库中删除项目时,CollectionChange并没有触发 汉德尔

不管怎样,这是我第二次使用可观察集合,所以我可能做错了

谢谢各位
干杯

为什么不按照从列表中删除该项目的相同逻辑从数据库中删除该项目?@mightybadboom老实说,我不知道为什么我不这么做,可能是因为我是noob,我认为应该这样做:DYour welcome:)@mightybadboom谢谢伙计,我在一个月前开始学习编程,我发现这相当困难,因为我想在做/解决某件事时遵循正确的方法,我不想要肮脏的解决方案,但解决某件事的方法和机会太多了,所以很难确定哪种方法是正确的和最正确的:/但我会继续,无论如何,感谢您的评论:)在开发WPF应用程序时,您应该看看MVVM模式。网上有很多很好的教程。享受它,有些人可能会忘记它,但我们都开始过一次;)
public partial class Companies : Window
{


        public ObservableCollection<Company> list = new ObservableCollection<Company>(Controller.SelectAll());

        public Companies()
        {
            InitializeComponent();


            list.CollectionChanged += (ss, ee) =>
            {
                if (ee.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove
                    && ee.OldItems != null && ee.OldItems.Count > 0)
                {
                    Company removedItem = ee.OldItems[0] as Company;
                    Controller.DeleteFromDatabaseById(removedItem.Id);

                }
            };

        }

        private void btnDeleteSelectedCustomer_Click(object sender, RoutedEventArgs e)
        {
            if (dtgMyCustomers.SelectedItem != null)
            {
            Company k = (Company)(dtgMyCustomers.SelectedItem);
            list.Remove(k);
            }
        }

}