私はアクティビティから別のアクティビティに移動しようとしています。私はまだMVVMCrossについて学んでいますので、この全体のパターンはまだ私にとって非常に新しいものです。私はXamarin.Androidでそれを適用している瞬間です。MVVMCross:Xamarin.AndroidイベントをViewModelコマンドにバインドする方法
セットアップ:
MainDashboardActivity
は、AndroidデザインサポートライブラリのNavigationView.
のViewModel
MainDashboardViewModel
が別のアクティビティへの単純なShowViewModel
あるIMvxCommand GoToSecondDashboard
を持っています。
NavigationViewにはNavigationItemSelectedイベントがあります。
navigationView.NavigationItemSelected += (o, e) =>
{
if(e.MenuItem.ItemId == Resource.Id.SecondDashboardMenu)
{
// make new intent to target activity
}
};
は、今私はViewModelにのIMvxCommandにナビゲーションロジックを押し込めなかった、と私はNavigationViewのイベントにバインドしたい、もはや意図やその他もろもろを作成:通常は、私はこれを行うだろう。どうすればこれを達成できますか?
私はthis answerがないかのように、レイアウトのコードファイルとないで流暢なバインディングロジックを使用したい:
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.View_Tip);
var edit = this.FindViewById<EditText>(Resource.Id.FluentEdit);
var set = this.CreateBindingSet<TipView, TipViewModel>();
set.Bind(edit).To(vm => vm.SubTotal);
set.Apply();
// for non-default properties use 'For':
// set.Bind(edit).For(ed => ed.Text).To(vm => vm.SubTotal);
// you can also use:
// .WithConversion("converter", "optional parameter")
// .OneTime(), .OneWay() or .TwoWay()
}
しかしNavigationItemSelected
はイベントです。イベントにコマンドをバインドする方法を見つけることができませんでした。それが起こる前にItemIdをフィルタリングするロジックもありますので、簡単なイベント・ツー・コマンド・バインディングではありません。
これが正しい方法であるかどうかはわかりません。私が望むのは、レイアウトファイルではなくメニュータップをコードファイルのコマンドにバインドすることだけです。
レイアウトファイルでバインディングを実行しないでください。私の意見では、通常のアプローチは次のようになります。 1.メニュー項目のモデルを定義します。 2.メニュー項目のビューモデルにリストを定義します。 3.メニュー項目のレイアウトを定義します。 4.メニュー項目をレイアウト上のNavigationViewにバインドします。 5.メニュー項目のレイアウトをナビゲーションビューに設定します。 6.メニュー項目の種類を想定したコマンドを定義します。 7. NavigationViewにコマンドをバインドします。 レイアウト上でやりたいと思っていないのであれば、私がコード内で行った部分が見つかるかどうかわかります。 – Cyriac
私は(制限された)経験はAndroidを直接扱うことから来ており、コードからバインドする傾向があるため、コード自体の中からバインドすることに慣れています。そして、コードを使ってレイアウトを混乱させることは、私にとってはちょっとエイリアンに感じるので、それがあります。 私がNavigationViewについて知っていることは、ヘッダーのレイアウトとメニュー項目(レイアウトではない)のメニュー.xmlが付属していることです。そのようなプロセスのサンプルはありますか? – batrand
私は、後でその事例を投稿することができますか、すでにそれを実装していた同僚に尋ねることができます。ちょっとエイリアンを感じるかもしれませんが、慣れていれば本当に快適です。特別な状況ではコードバインディングのみを使用しています。両方とも正と負の側面があります。 – Cyriac