【发布时间】:2015-03-12 13:55:38
【问题描述】:
我有一个 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;
}
}
}
【问题讨论】:
-
顺便说一句,
EmployeeDataContext.Employees:get将总是return null; -
@Binkan Salaryman 是的,在主窗口构造函数中初始化时 iis DataContext = new EmployeeDataContext() ; EmployeeDataContext.Employees:get 将返回 null 然后它将通过查询数据库(linq)获取集合