WhenAny / ObservableForProperty如何访问上一个和新值?

时间:2016-03-03 22:06:44

标签: reactiveui

简单案例:

public class Foo : ReactiveObject
{
    public Foo()
    {
        this.ObservableForProperty(t => t.Bar, t => t).Subscribe(t =>
        {
            //Logic using previous and new value for Bar
        }
    }

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

在ObservableForProperty订阅中,只能访问Bar的新值(通过t)。对于“beforeChange”参数,我们可以使用true调用ObservableForProperty,而只使用前一个值而不是新值。

我知道我可以在属性设置器中插入我的代码逻辑,但我想保留ObservableForProperty行为(过滤第一个setter并且当值没有改变时)。该属性也用于XAML绑定,需要propertyChanged触发器。

我错过了什么?我怎么能这么容易呢?感谢

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

public Foo()
{
   this.WhenAnyValue(t => t.Bar)
      .Buffer(2, 1)
      .Select(buf => new { Previous = buf[0], Current = buf[1] })
      .Subscribe(t => { //Logic using previous and new value for Bar });
}

请注意,第一次更改Bar时,这不会触发订阅逻辑。要获得该功能,请在缓冲之前添加.StartWith(this.Bar)

这会在重叠模式下使用Buffer运算符(skip< count)。