我认为我错过了绑定和反应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?喜欢在更新期间取消订阅或其他什么?
答案 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