c# - 查找位置 MVVMCross 的地址

标签 c# android mvvmcross

我目前正在使用下面的代码使用 MVVMCross for android 获取位置。我正在使用命令处理 View 上的位置更新以访问 GeoCoder 对象并获取地址数据。我从 this question 中获取了一些代码在 SO 上,但 ViewModel 似乎驻留在同一个项目中,而不是在核心中。我想知道这是否是实现此目标的正确方法,还是我应该使用其他方法

查看模型 `

    public IMvxCommand LocationUpdate { get; set; }

    public LocationViewModel(IMvxLocationWatcher locationWatcher)
    {
        _locationWatcher = locationWatcher;

        FindCurrentLocation();

        _timer = new Timer(OnTick, null, 1000, 1000);
    }

    private void OnLocation(MvxGeoLocation location)
    {
        Lat = location.Coordinates.Latitude;
        Lng = location.Coordinates.Longitude;

        if(LocationUpdate != null)
            LocationUpdate.Execute();

         _locationFound = true;
        _locationWatcher.Stop();           
    }

    private void FindCurrentLocation()
    {
        _locationFound = false;
        _locationWatcher.Start(new MvxLocationOptions { Accuracy =     MvxLocationAccuracy.Fine }, OnLocation, OnLocationError);
    }

`

查看

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.LocationView);

        _viewModel = (LocationViewModel) ViewModel;
        _viewModel.LocationUpdate = new MvxCommand(LocationUpdated);

        /* Initialisation code */
    }

    private void LocationUpdated()
    {
        var options = new MarkerOptions();
        LatLng latLng = new LatLng(_viewModel.Lat, _viewModel.Lng);
        options.SetPosition(latLng);
        options.SetTitle(_viewModel.SiteName);
        _site = _fragment.Map.AddMarker(options);

        _fragment.Map.AnimateCamera(CameraUpdateFactory.NewLatLngZoom(latLng, 12));
        Geocoder geocdr = new Geocoder(BaseContext);

        IList<Address> addresses = geocdr.GetFromLocation(_viewModel.Lat, _viewModel.Lng, 1);

        if (addresses.Any())
        {
            Address address = addresses.First();
            _viewModel.SiteName = address.GetAddressLine(0);
            _viewModel.SiteAddress = string.Concat( address.GetAddressLine(1),", ",
                                                   address.GetAddressLine(2), ", ", address.GetAddressLine(3));
        }
    }

最佳答案

您可能想将其创建为插件,在其中创建一个接口(interface),描述如何从坐标获取地址并返回它。

然后您将需要为每个需要它的平台实现特定于平台的实现。

您可以在此处阅读有关插件的更多信息: https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins

关于c# - 查找位置 MVVMCross 的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446644/

相关文章:

c# - 引发事件与直接方法调用的区别

java - 有什么方法可以将自动更正添加到我的 Android 键盘吗?

android - mvvmcross 图片资源加载扩展需求

ios - 表格刷新后MVVMCross iOS重新选择表格行

c# - 如何记录存储过程错误

c# - WCF 服务响应中的意外标记名称

android - 进度条在android中两边都变圆了

android - 如何从 Intent 中检索 `Parcelable` 数据?

ios - MvvmCross iOS UITableView 不会在属性更改时更新

c# - 正则表达式中的最小和最大长度