2016-04-27 6 views
0

Я пытаюсь связать окно информационного содержимого, которое появляется при нажатии на маркер в MapView для Android.Binding Android.Views.View с ViewModel с MvvmCross на Android

Я создал собственный класс менеджера, который принимает ItemSource и MapView (ObservableCollection) и добавляет маркеры на карте по мере изменения коллекции.

Теперь я хотел бы, чтобы связать окно InfoContent, генерируемый GetInfoContents(Marker marker)

В настоящее время я вынужден получить заполнение полей вручную, как показано ниже, но я хотел бы поле, чтобы быть данными, связанные непосредственно в макете с ток 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 вы должны попробовать BindingInflate из BindingContext:

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

Обновление: для вашей проблемы я не уверен, что это не слишком хаки, но вы можете использовать Mvx.RegisterSingleton(BindingContext); в своей MainActivity, а затем разрешите это с помощью var bindingContext = Mvx.Resolve<IMvxBindingContext>();.


Альтернатива: Вы можете подписаться на событие vm.PropertyChanged и обрабатывать изменения от себя - на самом деле писать свой собственный BindingContext.

+0

У меня есть менеджер, который привязывает маркеры от наблюдаемой коллекции в другом классе. Подпись класса - это открытый публичный класс BaseMapViewDataBindingSource: Java.Lang.Object, IOnMapReadyCallback, GoogleMap.IInfoWindowAdapter 'и это. BindingInflate недоступно оттуда – wishmaster

+0

Хорошо, я вижу проблему. Я немного обновил, но не очень доволен. Без BindingContext вы не можете использовать привязку MvvmCross. – Matt

Смежные вопросы