我的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();
答案 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();
}