2016-04-27 5 views
0

アンドロイド用のMapViewでマーカーをクリックすると表示される情報コンテンツウィンドウをバインドしようとしています。AndroidでMvvmCrossを使用してViewModelでAndroid.Views.Viewをバインドする

私は、ItemSourceとMapView(ObservableCollection)を取り、コレクションの変更に合わせてマーカーにマーカーを追加するカスタムマネージャークラスを作成しました。

今私は現在、私は手動で以下のようにフィールドを移入取得することを強制していますGetInfoContents(Marker marker)

によって生成されたInfoContentウィンドウをバインドしたいと思いますが、私はとレイアウトに直接結合データとフィールドを希望します現在のViewModel

public override Android.Views.View GetInfoContents(object item, Marker marker) 
     { 
      var vm = item as DetailCalloutViewModel; 
      if (vm != null) { 
       var view = _layoutInflater.Inflate(Resource.Layout.view_store_marker_info_window, null); 
       var address = view.FindViewById<TextView>(Resource.Id.address); 
       var description = view.FindViewById<TextView>(Resource.Id.description); 
       var badge = view.FindViewById<TextView>(Resource.Id.badge); 

       address.Text = vm.Address; 
       description.Text = vm.Location.Description; 
       badge.Text = vm.BadgeNumber; 
       return view; 
      } 

      return null; 
     } 

答えて

0

MabyeあなたがBindingContextをからBindingInflateを試してみてください:

var view = this.BindingInflate(Resource.Layout.SomeLayout, null); 

アップデート:あなたの問題については、これがあまりにもハッキリではないかどうかはわかりませんが、Mvx.RegisterSingleton(BindingContext);をMainActivityに使用してvar bindingContext = Mvx.Resolve<IMvxBindingContext>();で解決できます。


代替:あなたのvm.PropertyChangedイベントにサブスクライブし、自分で変更を扱うことができる - 実際にあなた自身のBindingContextを書きます。

+0

私は、異なるクラスのobservableコレクションからマーカーをデータバインドするマネージャーを持っています。このクラスのシグネチャは 'public abstract class BaseMapViewDataBindingSource:Java.Lang.Object、IOnMapReadyCallback、GoogleMap.IInfoWindowAdapter 'です。 BindingInflateはそこから利用できません – wishmaster

+0

これは問題です。私はちょっと更新しましたが、あまり幸せではありません。 BindingContextがなければ、MvvmCross Bindingは使用できません。 – Matt

関連する問題