订阅自跟踪实体PropertyChanged事件

本文关键字:PropertyChanged 事件 实体 跟踪 | 更新日期: 2023-09-27 18:20:44

我正在使用自跟踪实体编写一个WPF应用程序。我在禁用/启用"保存"按钮时遇到问题,因为我的模型值已更改。通常,使用常规的实体框架模型,我可以简单地在ViewModel中订阅Model.PropertyChanged事件,然后为我的保存按钮RaisePropertyChanged,该按钮将检查验证和"禁用"或"启用"保存按钮。

出于某种原因,使用自跟踪实体时,我注意到Model.PropertyChanged事件被标记为受保护,因此我无法在ViewModel中直接订阅它。有没有办法在不修改T4模板的情况下订阅此事件??

    protected virtual void OnPropertyChanged(String propertyName)
    {
        if (ChangeTracker.State != ObjectState.Added && ChangeTracker.State != ObjectState.Deleted)
        {
            ChangeTracker.State = ObjectState.Modified;
        }
        if (_propertyChanged != null)
        {
            _propertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    protected virtual void OnNavigationPropertyChanged(String propertyName)
    {
        if (_propertyChanged != null)
        {
            _propertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged{ add { _propertyChanged += value; } remove { _propertyChanged -= value; } }
    private event PropertyChangedEventHandler _propertyChanged;
    private ObjectChangeTracker _changeTracker;

订阅自跟踪实体PropertyChanged事件

我总是修改模板,使其不受保护。这是一个有原因的模板:)

我想另一种选择是在类上创建一个公共方法,该方法在内部引发PropertyChanged通知。

partial class MyModel
{
    public RaiseEFPropertyChanged(string propertyName)
    {
        RaisePropertyChanged(propertyName);
    }
}