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

标签 xamarin mvvmcross

我的 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/

相关文章:

android 中的 mvvmcross touch 命令绑定(bind)

MvvmCross:应用程序范围的 View 模型?

c# - 无需在 ViewModel 上使用 Java.Lang.Object 即可自动完成 MVVM 和 Java 转换

xamarin - 在RelativeLayout Xamarin Forms中将 View 与底部和顶部对齐

ios - App/iOS 因 “Terminating in response to backboardd' s 终止而崩溃”

屏幕上的 MvvmCross 导航

c# - 如何在 Xamarin Forms 中维护 ListView 项的下载进度

c# - Xamarin Android 支持库 v4(不完整)?

mvvmcross - 将自定义对象的数据绑定(bind)到MvvmCross中的TextView

mvvm - UWP MvvmCross Bootstrap类不起作用