xamarin 我可以根据条件从IOS调用MVVM交叉命令方法吗?

6psbrbz9  于 2022-12-07  发布在  iOS
关注(0)|答案(1)|浏览(137)

我在我的视图模型中有下面的MVVM交叉命令。我想根据iOS的条件调用它。这可能吗?

    • 命令**
public IMvxCommand LoginCommand
{
    get
    {
        return _loginCommand ?? (_loginCommand = new MvxCommand(async () => await ExecLoginClick()));
    }
}
    • iOS绑定**
var bindings = this.CreateBindingSet<LoginView, LoginViewModel>();
bindings.Bind(username).To(vm => vm.Email);
bindings.Bind(password).To(vm => vm.Password);
bindings.Bind(login_button).To(vm => vm.LoginCommand);
bindings.Bind(forgot_button).To(vm => vm.ForgotCommand);
bindings.Bind(register_button).To(vm => vm.GetSignUpCommand);
//bindings.Bind(btn_facebook).To(vm=>vm.)
bindings.Apply();
qyuhtwio

qyuhtwio1#

您可以使用CanExecute执行此操作。

public IMvxCommand LoginCommand
{
    get
    {
        return _loginCommand ?? 
        (_loginCommand = new MvxAsyncCommand(ExecLoginClick, CanLogin));
    }
}

private bool CanLogin()
{
    if ( /*your condition*/)
    {
        return true;
    }
    return false;
}

private Task ExecLoginClick()
{
    //...
}

每种方法都会影响你的状况。你必须打电话给

LoginCommand.RaiseCanExecuteChanged();

根据CanExecute的返回值禁用或启用Button。
如果要从视图中执行命令,则应该从泛型MvxViewController<T>MvxActivity<T>继承,如。

public class LoginView : MvxViewController<LoginViewViewModel>
// or
public class LoginView : MvxActivity<LoginViewViewModel>

然后你就可以打电话

if(/*condition*/)
{
    ViewModel.LoginCommand.Execute();
}

相关问题