反应性UI和双向绑定

时间:2016-05-17 01:05:12

标签: mvvm reactive-programming reactiveui

我认为我错过了绑定和反应ui如何协同工作的东西。

这是一个例子。我有一个ToggleSwitch,它绑定​​到我的View模型中的一个可观察属性:

<ToggleSwitch IsOn="{Binding IsPowered, Mode=TwoWay}"/>

当开关从关闭切换时 - &gt;我想执行一段代码,所以我执行以下操作:

this.WhenAnyValue(x => x.IsPowered).Subscribe(isPowered => 
{
    await MyService.UpdatePowerStatusAsync(isPowered);
});

切换按钮时,此功能正常。但是,假设我在后台线程上执行刷新并从我的服务器获得IsPowered现在为真的通知(之前为假)。我想通知UI中的ToggleSwitch处于正确的状态,所以我设置:

IsPowered = true;

但是然后触发了使用新值调用我的服务的WhenAnyValue,我不想这样做,因为它在服务中已经是真的。

无论如何确保仅因用户输入而调用WhenAnyValue?喜欢在更新期间取消订阅或其他什么?

1 个答案:

答案 0 :(得分:1)

因此,如果IsPowered的{​​{1}}变为真,而ToggleSwitch的{​​{1}}为假,那么MyService必须运行代码;否则,如果Service中的IsPowered已经为真,则MyService不得运行代码。

为什么不在MyService中加if?类似的东西:

MyService.UpdatePowerStatusAsync

PS:您写道“当交换机从关闭切换时 - >打开”...如果在private bool _internalIsPowered; UpdatePowerStatusAsync(bool isPowered) { if (_internalIsPowered) return; //here all the code if _internalIsPowered is false _internalIsPowered = isPowered; } 关闭时不需要Subscribe执行,请使用{{1子句:

IsPowered