2014-05-03 4 views
2

В настоящее время я получаю местоположение с помощью MVVMCross для android, используя код ниже. Я обрабатываю обновление местоположения в представлении, используя команду для доступа к объекту GeoCoder & для получения данных адреса. Я взял код от this question на SO, но кажется, что ViewModel находится в том же проекте, а не в ядре. Я хотел бы знать, если это правильный способ достижения этой цели, или я должен использовать другой подходПоиск адреса места MVVMCross

View Model `

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

ответ

1

Возможно, вы захотите создать его как плагин, где вы создаете te Interface, который описывает, как получить адрес из координат, и возвращает его.

Тогда вам понадобится реализовать реалистичные для платформы платформы для каждой платформы, которая будет нужна.

Вы можете прочитать больше о плагинах здесь: https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins

+1

@ SeeD-Seifer опубликовал плагин - см https://github.com/SeeD-Seifer/Mvx.Geocoder – Stuart

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