我有一个自定义基类型,称为MyEntityBase
自动生成的类中类型的超DataContext
类,MyContext
. 在尝试创建模拟数据上下文时,我决定实现INotifyPropertyChanged
onMyEntityBase
以便我可以一般地跟踪更改。
这是我的班级的样子:
public abstract class MyEntityBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
基于这个类,我创建了一个通用Repository<T>
类,用于存储特定类型实体的实例。此类背后的基本思想是提供类似于数据上下文的方法,但由内存中的列表支持。我还想模拟跟踪更改,因为更改集对于我们的应用程序的业务逻辑很重要,以便与第 3 方系统同步。
这是一个基本的shell实现Repository<T>
:
public class Repository<T>
where T : MyEntityBase, INotifyPropertyChanged
{
protected List<T> _data;
public Repository(List<T> data)
{
this._data = data;
foreach (var entity in this._data)
{
entity.PropertyChanged += new PropertyChangedEventHandler(entity_PropertyChanged);
}
}
protected void entity_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Console.WriteLine("HERE");
}
}
现在我创建一个简单的 type 存储库Employee
,填充一些数据,并尝试修改数据的属性。我希望该PropertyChanged
事件被引发,因为该Employee
对象具有来自自动生成的内置属性更改通知DataContext
。但是,当我运行以下代码时,HERE
在任何地方的输出中都看不到生成:
var data = new List<Employee> {
new Employee { FirstName = "Bob" },
new Employee { FirstName = "Joe" },
};
var repo = new Repository<Employee>(data);
// This should fire the PropertyChanged event
data[0].FirstName = "John";
我究竟做错了什么?
更新:如果我将订阅事件的行更改为以下内容:
(entity as Employee).PropertyChanged += ...
然后它工作正常。但是,T
已经知道是Employee
并且entity
是 type 的一个实例Employee
,那么有什么区别呢?即使我做到了,event
它仍然无法正常工作。MyEntityBase
virtual