我的 View 模型中有以下 MVVM 交叉命令。我想根据 iOS 的条件来调用它。这可能吗?
命令
public IMvxCommand LoginCommand
{
get
{
return _loginCommand ?? (_loginCommand = new MvxCommand(async () => await ExecLoginClick()));
}
}
iOS 绑定(bind)
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();
最佳答案
您可以使用 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 的返回值禁用或启用按钮。
如果您想从您的 View 执行命令,您应该继承通用 MvxViewController<T>
或MvxActivity<T>
喜欢。
public class LoginView : MvxViewController<LoginViewViewModel>
// or
public class LoginView : MvxActivity<LoginViewViewModel>
然后你就可以调用
if(/*condition*/)
{
ViewModel.LoginCommand.Execute();
}
关于xamarin - 我可以根据条件从Ios调用MVVM交叉命令方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36303203/