我有一个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;
}
}
}
答案 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);
}
}