使用面向方面的编程针对只读属性从ViewModel更新视图

时间:2018-08-17 09:29:37

标签: wpf mvvm aop

我在WPF项目中使用面向方面的编程。我用它来通过INotifyPropertyChanged接口和一个实现行为类来装饰viewModels,如下所示:

Container.RegisterType<SomeViewModel>(
                new Interceptor<VirtualMethodInterceptor>(),
                new InterceptionBehavior(new LoggingBehavior(TraceEventType.Verbose)),
                new AdditionalInterface<INotifyPropertyChanged>(),
                new InterceptionBehavior<NotifyPropertyChangedBehavior>());

这很好。 但是当我只得到像:

这样的属性时
public bool IsDummy
        {
            get { return _isDummy; }
        }

如何从ViewModel调用OnPropertyChanged方法,该方法负责更新View(UI)。因此,如果将变量_isDummy更新为true,我应该可以调用与OnPropertyChanged(“ IsDummY”);

相同的功能

1 个答案:

答案 0 :(得分:0)

要通知视图某个值已更改,您必须使用已更改的属性引发OnPropertyChanged事件。这通常是通过标准实现来完成的:

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

然后在属性的设置器中

public bool IsDummy
{
    set
    {
        if (_isDummy!= value)
        {
            _isDummy= value;
            OnPropertyChanged();
        }
    }
}

仅当从属性设置器中调用此语法时,该语法才有效;或者,当属性在类中的其他位置更改时,也可以调用它。

OnPropertyChanged(nameof(IsDummy));