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

时间:2016-03-30 08:14:46

标签: xamarin mvvmcross

我的viewmodel中有以下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();

1 个答案:

答案 0 :(得分:2)

您可以使用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.Exetute();
}