首页 > 解决方案 > 创建一个假命令,我做错了吗?

问题描述

我已经为应用程序实现了一个登录对话框。单击“登录”按钮时,用户界面将被禁用,并在登录时显示一个微调器。此外,如果用户之前已登录,应用程序可以使用保存的令牌自动再次登录。

为了实现这一点,我创建了两个命令。一条命令用于用户启动登录,一条命令用于自动登录。这样我就可以观察这两个命令的 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);
});

我的问题是,有什么更清洁的方法来做到这一点?我可以在没有两个命令的情况下执行此操作吗?干杯。

标签: reactiveui

解决方案


我认为您的方法还可以,我处于类似的情况,并且我在不同的命令上有 AutoLogin 和 Login,如果您考虑一下,至少对我而言,自动登录和登录是不同的事情。我唯一不同的是将 CmdAutoLogin执行放在视图上,而不是在视图模型中:

this.WhenActivated(disposables =>
        {
            Observable.Return(Unit.Default).InvokeCommand(ViewModel.CmdAutoLogin);
        });

推荐阅读