2016-03-30 7 views
2

私は私のviewmodelで以下のMVVM crossコマンドを持っています。私はこれをiOSからの条件に基づいて呼びたいと思います。これは可能ですか?条件に基づいてIosからMVVMのクロスコマンドメソッドを呼び出すことはできますか?

コマンド

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

を呼び出すことができ、あなたのViewControllerから手動でコマンドを実行しますか?または、ボタンをクリックして条件が成立した場合にのみ実行する必要がありますか? –

+0

こんにちは、if(条件が真である)のようないくつかの条件をiOSに入れたいのですが、それ以外の場合はmvvmコマンドを呼び出します。私はMVVMCrossで新しくなっているので、それは可能です..短いですが、私はviewcontrollerから手動でコマンドを呼び出したいです.. –

答えて

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の戻り値に基づいて有効になっています。

ビューからコマンドを実行する場合は、汎用MvxViewController<T>またはMvxActivity<T>のように継承する必要があります。

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

そしてあなたは

if(/*condition*/) 
{ 
    ViewModel.LoginCommand.Exetute(); 
} 
+0

返信ありがとう、私たちはviewmodelのオブジェクトを作成して呼び出すことができますか? –

+0

ありがとうございました。あなたは私の一日を救った。私はいくつかの他の質問がありますが、私はいくつかの他の投稿で尋ねます。 –

関連する問題