查找位置MVVMCross的地址

本文关键字:地址 MVVMCross 位置 查找 | 更新日期: 2023-09-27 18:01:24

我目前正在使用MVVMCross android使用下面的代码的位置。我正在处理视图上的位置更新,使用命令访问GeoCoder对象&获取地址数据。我已经采取了一些代码从这个问题上所以,但似乎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);
    }

<

视图/strong>

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

查找位置MVVMCross的地址

你可能想把它创建为一个插件,在那里你创建一个接口,描述如何从坐标中获取地址,并返回它。

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

你可以在这里阅读更多关于插件的内容:https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins