【发布时间】:2020-05-02 18:05:58
【问题描述】:
我的 ViewModel 上有一个属性“CurrentCompany”,该属性本身继承自 ReactiveObject 并声明为 OAPH:
private ObservableAsPropertyHelper<CompanyDTO> _currentCompany;
public CompanyDTO CurrentCompany => _currentCompany.Value;
然后我有一个 ReactiveCommand 调用异步任务来保存我的对象的更改:
SaveCompanyCommand = ReactiveCommand.CreateFromTask(SaveCompanyDTO, canSaveCommand);
“canSaveCommand”定义如下:
var canSaveCommand = (this)
.WhenAnyObservable(vm => vm.CurrentCompany.Changed)
.Select(_ => true);
这一切都按预期工作,我的 SaveCompanyCommand 绑定到的按钮被禁用,我在 CurrentCompany-object 上更改了一些内容,并且该按钮被启用。 我不知道的是:执行 SaveCompanyDTO-Task 后,我希望再次禁用该按钮。我怎样才能告诉 reactiveui 我的 CurrentCompany-object 没有改变并且又是新鲜的?我怎样才能做到这一点?
【问题讨论】:
-
您的 canSaveCommand 实现始终选择 true。相反,您应该选择 Changed 的值。
-
"Changed" 不是布尔值,而是类型为 "IObservable
>" EventArgs 告诉我已更改的属性的名称。这意味着当我更改名为“名称”的属性上的字母时,Changed-Event 会触发并告诉我“属性“名称”已更改”。但是当我保存我的记录时,我如何告诉我的 ReactiveObject 它应该重新开始监视更改? -
哦,我不使用 Changed(我不经常看到),而是在 canSaveCommand 基础的 company 类中有一个响应式 IsDirty 属性。
标签: reactive-programming system.reactive reactiveui