如何将Remove方法添加到ObservableCollection?

时间:2015-03-12 13:55:38

标签: c# wpf linq telerik

我有一个raddataform控件,它使用ObservableCollection作为输入源并自动生成字段。我在person类本身中实现了Insert和Edit Logic,它通过BeginEdit和EndEdit方法实现IEditableObject和INotifyPropertyChanged。但是public void Delete()方法不会在那里工作。所以我知道ObservableCollection有CollectionChanged事件,它有NotifyChangedCollectionAction.Remove。那么如何在ObservableCollection上实现删除(删除)逻辑,以便它可以使用linq删除相应的字段?
这是代码:

 public class EmployeeDataContext
{
    private ICollectionView employees = null;
    public ICollectionView Employees
    {
        get
        {
            if (this.employees == null)
            {
                ObservableCollection<Person> newEmployees = new ObservableCollection<Person>();
                DataClassesDataContext db = new DataClassesDataContext();

                var query = from c in db.EPersons
                            select c;
                foreach (var q in query)
                {
                    newEmployees.Add(new Person((DateTime)q.EStartingDate, q.EFirstName,q.ELastName, (Person.OccupationPositions) q.EOccupation,q.EPhoneNumber, (int)q.ESalary));
                }                
                //newEmployees.CollectionChanged += (sender, args) =>
                //    {
                //        if (args.Action == NotifyCollectionChangedAction.Remove) 
                //    }
            return this.employees;

        } 
    }
}

2 个答案:

答案 0 :(得分:0)

从代码隐藏中的事件处理程序的evenargs中为BeginEdit和EndEdit提取DataConext对象。

然后调用viewmodel的Delete方法,引用已撤消的DataContext。

答案 1 :(得分:-1)

我并非100%确定我完全理解您的问题,但如果您问的是如何向Remove课程添加自定义ObservableCollection<T>方法,那么您可以使用Extension Methods。也许是这样的:

public static class ExtensionMethods
{
    public static bool Remove<T>(this ObservableCollection<T> collection)
    {
        var someObject;
        // custom logic here
        return collection.Remove(someObject);
    }
}