订阅自我跟踪实体PropertyChanged事件

时间:2012-01-19 18:42:29

标签: c# wpf silverlight mvvm self-tracking-entities

我正在使用自我跟踪实体编写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;

1 个答案:

答案 0 :(得分:0)

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

我认为另一种方法是在您的类上创建一个公共方法,在内部引发PropertyChanged通知。

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