reactiveui - 创建一个假命令,我做错了吗?
问题描述
我已经为应用程序实现了一个登录对话框。单击“登录”按钮时,用户界面将被禁用,并在登录时显示一个微调器。此外,如果用户之前已登录,应用程序可以使用保存的令牌自动再次登录。
为了实现这一点,我创建了两个命令。一条命令用于用户启动登录,一条命令用于自动登录。这样我就可以观察这两个命令的 IsExecuting Observable,就像这样
_isExecuting = this.WhenAnyObservable(
x => x.CmdLogin.IsExecuting,
x => x.CmdAutoLogin.IsExecuting)
.ToProperty(this, x => x.IsExecuting);
IsExecuting viewmodel 属性然后被绑定到视图的 Isabled 属性。这是有效的,用户界面表现完美,但有两个命令感觉很不干净。另外,我正在触发视图模型中的自动登录,如下所示:
this.WhenActivated((Action<IDisposable> disposer) =>
{
(CmdAutoLogin as System.Windows.Input.ICommand).Execute(null);
});
我的问题是,有什么更清洁的方法来做到这一点?我可以在没有两个命令的情况下执行此操作吗?干杯。
解决方案
我认为您的方法还可以,我处于类似的情况,并且我在不同的命令上有 AutoLogin 和 Login,如果您考虑一下,至少对我而言,自动登录和登录是不同的事情。我唯一不同的是将 CmdAutoLogin执行放在视图上,而不是在视图模型中:
this.WhenActivated(disposables =>
{
Observable.Return(Unit.Default).InvokeCommand(ViewModel.CmdAutoLogin);
});
推荐阅读
- git - 如何在 GIT 中构建标签树?
- swift - 在 Swift 中将可变参数作为数组传递
- nuxt.js - 当我使用 \nuxt\strapi\ nuxt/apollo 时,它总是告诉Cannot read property 'content' of undefined
- java - 为什么最终参数修饰符没有在具体实现方法签名中继承?
- mysql - 数据获取成功,而显示进程列表为空
- bazel - `bazel fetch` 是否支持排除目标?
- ruby - 如何使用 ruby 代码从另一台机器连接到 docker 中的 mongo 数据库
- image - 如何将所有 Jenkins 设置和作业绑定到 Docker 映像
- spring - Spring RestTemplate 交换帖子不适用于 SSL 引发 SunCertPathBuilderException
- saml - 如何在不使用 OneLogin UI 的情况下实现 OneLogin SSO/SLO