Binding Android.Views.View with ViewModel with MvvmCross on



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

我创建了一个自定义管理器类,该类采用 ItemSource 和 MapView(ObservableCollection),并在集合更改时在地图上添加标记。

现在我想绑定由 GetInfoContent(标记标记)生成的信息内容窗口

目前我被迫检索手动填充字段,如下所示,但我希望字段直接绑定在当前 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;
        } 

Mabye 你应该尝试从 BindingContext 开始 BindingInfwell:

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

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


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

最新更新