Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 订阅自跟踪实体PropertyChanged事件_C#_Wpf_Silverlight_Mvvm_Self Tracking Entities - Fatal编程技术网

C# 订阅自跟踪实体PropertyChanged事件

C# 订阅自跟踪实体PropertyChanged事件,c#,wpf,silverlight,mvvm,self-tracking-entities,C#,Wpf,Silverlight,Mvvm,Self Tracking Entities,我正在使用自跟踪实体编写一个WPF应用程序。当我的模型值更改时,我无法禁用/启用“保存”按钮。通常,对于常规实体框架模型,我可以简单地订阅ViewModel中的Model.PropertyChanged事件,然后为我的保存按钮提升属性更改,该按钮检查验证并禁用或启用我的保存按钮 出于某种原因,对于自跟踪实体,我注意到Model.PropertyChanged事件被标记为受保护,因此我无法在ViewModel中直接订阅它。有没有办法在不修改T4模板的情况下订阅此活动 protected v

我正在使用自跟踪实体编写一个WPF应用程序。当我的模型值更改时,我无法禁用/启用“保存”按钮。通常,对于常规实体框架模型,我可以简单地订阅ViewModel中的Model.PropertyChanged事件,然后为我的保存按钮提升属性更改,该按钮检查验证并禁用或启用我的保存按钮

出于某种原因,对于自跟踪实体,我注意到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通知

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

我继续修改了模板,看起来效果很好。比我想象的要容易。谢谢