2016-04-27 10 views
0

Ich versuche, das Info-Inhalt-Fenster zu binden, das beim Klicken auf eine Markierung in einem MapView für Android angezeigt wird.Binding Android.Views.View mit ViewModel mit MvvmCross auf Android

Ich habe eine benutzerdefinierte Manager-Klasse erstellt, die eine ItemSource und eine MapView (ObservableCollection) annimmt und Markierungen in der Map hinzufügt, wenn sich die Auflistung ändert.

Jetzt würde ich gerne das InfoContent Fenster binden, die derzeit von GetInfoContents(Marker marker)

erzeugt wird, bin ich gezwungen, rufen Sie die Felder manuell wie unten bevölkert, aber ich würde die Felder wie Daten direkt mit der im Layout gebunden zu sein aktuelle Ansichtsmodell

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; 
     } 

Antwort

0

Mabye sollten Sie BindingInflate von Binding versuchen:

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

Update: Für Ihr Problem, ich bin mir nicht sicher, ob dies nicht zu hacky, aber Sie könnten Mvx.RegisterSingleton(BindingContext); in Ihrem MainActivity verwenden und dann beheben Sie dies durch var bindingContext = Mvx.Resolve<IMvxBindingContext>();.


Alternative: Sie zu Ihrem vm.PropertyChanged Ereignis abonnieren können und behandeln Änderungen von selbst - eigentlich Ihr eigenes Binding zu schreiben.

+0

Ich habe den Manager, der die Marker aus der beobachtbaren Sammlung in einer anderen Klasse bindet. Die Signatur der Klasse lautet: public abstract class BaseMapViewDataBindingSource: Java.Lang.Object, IOnMapReadyCallback, GoogleMap.IInfoWindowAdapter 'und dies. BindingInflate ist von dort nicht verfügbar – wishmaster

+0

Ok, ich sehe das Problem. Ich habe ein wenig aktualisiert, aber nicht sehr glücklich. Ohne BindingContext können Sie die MvvmCross-Bindung nicht verwenden. – Matt