我可以避免为依赖属性显式调用RaisePropertyChanged吗?

时间:2017-01-07 21:46:51

标签: wpf mvvm mvvm-light

我有

    public override bool RelatedProperty
    {
        get { return this.SomeProperty > 0; }
    }

    public int SomeProperty
    {
        get { return this.someProperty; }
        protected set
        {
            this.Set<int>(ref this.someProperty, value);
            this.RaisePropertyChanged(nameof(this.RelatedProperty));
        }
    }

RelatedProperty显然取决于SomeProperty

是否有更好的方法来更新绑定,而不是从RaisePropertyChanged的设置者调用RelatedProperty的{​​{1}}?

1 个答案:

答案 0 :(得分:1)

  

是否有更好的方法来更新绑定,而不是从SomeProperty的setter调用RelatedProperty的RaisePropertyChanged?

没有。至少不使用MvvmLight和实现属性的必要方法。

如果您使用的是反应性UI框架,例如ReactiveUI,您将以功能方式处理属性更改:

public class ReactiveViewModel : ReactiveObject
{
    public ReactiveViewModel()
    {
        this.WhenAnyValue(x => x.SomeProperty).Select(_ => SomeProperty > 0)
            .ToProperty(this, x => x.RelatedProperty, out _relatedProperty);
    }

    private int _someProperty;
    public int SomeProperty
    {
        get { return _someProperty; }
        set { this.RaiseAndSetIfChanged(ref _someProperty, value); }
    }

    private readonly ObservableAsPropertyHelper<bool> _relatedProperty;
    public bool RelatedProperty
    {
        get { return _relatedProperty.Value; }
    }
}

如果您有兴趣,可以在ReactiveUI的文档和创建者Paul Betts的博客中阅读更多相关信息:

https://docs.reactiveui.net/en/fundamentals/functional-reactive-programming.html http://log.paulbetts.org/creating-viewmodels-with-reactiveobject/