简单案例:
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触发器。
我错过了什么?我怎么能这么容易呢?感谢
答案 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
)。