gpt4 book ai didi

c# - 应该覆盖哪些方法才能正确继承 `ObservableCollection`

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:26 24 4
gpt4 key购买 nike

我想创建一个连接TableObservableCollection 功能的类。所以我写道:

public sealed class ObservableTable<T> : ObservableCollection<T>, ITable<T> where T : class
{
private Table<T> _table;

public Expression Expression => _table.AsQueryable().Expression;
public Type ElementType => _table.AsQueryable().ElementType;
public IQueryProvider Provider => _table.AsQueryable().Provider;

public new IEnumerable<T> Items => _table;
public new T this[int index] => _table.ElementAt(index);
public new int Count => _table.Count();

public ObservableTable(ref DataContext dbContext)
{
_table = dbContext.GetTable<T>();
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}

public void InsertOnSubmit(T entity)
{
_table.InsertOnSubmit(entity);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add));
}

public void Attach(T entity)
{
_table.Attach(entity);
}

public void DeleteOnSubmit(T entity)
{
_table.DeleteOnSubmit(entity);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove));
}
}

但是尽管 _table 对象正确地从数据库中获取了所有记录,但是当我将我的类转换为 ObservableCollection 时,该集合是空的。我应该重写什么才能让它工作? ItemsCount 属性还不够吗?

最佳答案

因为底层ObservableCollection<T> 空的。您正在重定向 ObservableTable<T> 的索引器和计数属性从表中返回值,并且您通过 new 隐藏了原始属性实现,但实际集合,内部存储即ObservableCollection使用,永远不会被填充。

如果您使用 ObservableTable<T>照原样,一切正常。但是一旦你把它转换到 ObservableCollection<T> ,将调用索引器和计数属性的原始实现,它们将尝试从内部存储中检索值和计数。

关于c# - 应该覆盖哪些方法才能正确继承 `ObservableCollection`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32453299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com