将Android.Views.View与ViewModel绑定在Android上的{MvvmCross

时间:2016-04-27 23:32:43

标签: xamarin xamarin.android mvvmcross

我正在尝试绑定在单击MapView for android中的标记时显示的信息内容窗口。

我创建了一个自定义管理器类,它接受一个I​​temSource和一个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;
        } 

1 个答案:

答案 0 :(得分:0)

Mabye你应该从BindingContext尝试BindingInflate

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

更新:对于您的问题,我不确定这是不是太苛刻,但您可以在MainActivity中使用Mvx.RegisterSingleton(BindingContext);,然后通过var bindingContext = Mvx.Resolve<IMvxBindingContext>();解决此问题。

替代方案:您可以订阅自己的vm.PropertyChanged事件并自己处理更改 - 实际上是编写自己的BindingContext。