2016-12-28 21 views
0

私はxamarin iosプロジェクトにMVVMCrossを使用しています。私のカスタムセルビューから、ビューモデルにパラメータを渡したいと思います。 MVVMCrossを使用することは可能ですか?Xamarin.IOS:MVVMCrossビューからViewModelにパラメータを渡す

CommandParameterプロパティを使用しようとしましたが、機能しませんでした。ビューからviewmodelにパラメータを渡すことは可能ですか?そうであれば誰かがスニペットを提供できますか?

更新

マイセルはボタンがあり、ボタンの上に私が操作を実行するためにクリックされたボタンの細胞指数を知りたいクリックありがとうございます。私はそれを行うために次のコードを使用しています。

this.DelayBind(() => 
{ 
    var bSet = this.CreateBindingSet<MyeCell, SomeViewModel>(); 
    bSet.Bind(cellIndex).To(vm => vm.index); 
    bSet.Bind(UserPostBtn).To(vm => vm.EditPhotoCommand); 
    bSet.Apply(); 
}); 

私は、ビューとのviewmodelを接続するためにdelaybindを使用しますが、ボタンのclickmに、私は次のエラーを取得しています試してみました:official documentation for MvvmCrossを見て、どのようにUITableViewsとUITableViewCellsで動作するようにしてい

invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.

+0

セルをクリックしてパラメータを渡しますか?ビューモデルに渡すものがわかるように、コードを提供してください。 – Plac3Hold3r

+0

私の質問が更新されました@ Plac3Hold3r – TheDeveloper

答えて

3

ViewModelには、MvxCommandParameterValueConverterというコマンドを使用してパラメータを渡すことができます。

文字列名のアプローチ:

bSet 
    .Bind(UserPostBtn) 
    .To(vm => vm.EditPhotoCommand) 
    .WithConversion("CommandParameter", cellIndex); 

入力した名前のアプローチ:

bSet 
    .Bind(UserPostBtn) 
    .To(vm => vm.EditPhotoCommand) 
    .WithConversion(new MvxCommandParameterValueConverter(), cellIndex); 

拡張メソッドのアプローチ:

bSet 
    .Bind(MainButton) 
    .To(vm => vm.EditPhotoCommand) 
    .CommandParameter(cellIndex); 

次に、渡されたパラメータをViewModelで受け取ります。

IMvxCommand _editPhotoCommand; 
public IMvxCommand EditPhotoCommand => 
    _editPhotoCommand ?? (_editPhotoCommand = new MvxCommand<int>(EditPhotoExecution)); 

private void EditPhotoExecution(int index) 
{ 
    // do stuff 
} 

更新:

MvvmCrossもあなただけのコマンドパラメータを渡すと、それはMvxCommandParameterValueConverterの作成を処理することができます拡張メソッド、CommandParameterを、提供します。

1

してください。

基本的に、あなたのMvxTableViewSourceサブクラスは、選択されたセルについて通知を受けます。今すぐあなたのモデルをチェックし、インデックスを一致させるだけの問題です...

入力されたテキストやセル内で反転されたスイッチを知る必要がある場合は、セルサブクラスと細胞供給源。あなたのUITableViewCellサブクラスにDelayBindを必ず使用してください。

+0

私は 'DelayBind'を使用しましたが、ボタンをクリックしたときに' invalid mode 'kCFRunLoopCommonModes'がCFRunLoopRunSpecificに提供されました - デバッグするために_CFRunLoopError_RunCalledWithInvalidModeを中断しました。このメッセージは、1回の実行につき1回だけ表示されます。 ' – TheDeveloper

+0

ビューモデルに直接バインドするのではなく、ソースにバインドする必要があります。 –

関連する問題