我在我的xaml windows phone应用程序中有地图控件,我想从我的mainviewmodel访问我的地图,因为我把所有逻辑代码放在那里,无论如何要添加它?
地理位置= 等待geolocator.GetGeopositionAsync( TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(30));
var gpsCenter =
new GeoCoordinate(
position.Coordinate.Latitude,
position.Coordinate.Longitude);
myMap.SetView(gpsCenter, 10);
latitude = position.Coordinate.Latitude;
longitude = position.Coordinate.Longitude;
UpdateTransport();
如果我把所有代码都放到mainpage.xaml.cs中,这就是应该存在的代码
myMap.SetView(gpsCenter,10);
这是我试图添加到我的xaml组件中的代码,它只进行一些缩放并将我的地图移动到完全手机位置数据,我可以把它放到mainpage.xaml.cs但是因为有2个变量我需要在我的mainviewmodel(纬度和经度),所以我决定把它全部放入mainviewmodel
修改
private GeoCoordinate _center;
public GeoCoordinate center
{
get { return _center; }
set { this.SetProperty(ref this._center, value); }
}
public MainViewModel()
{
center = new GeoCoordinate();
}
private async void LoadTransportData()
{
Geolocator geolocator = new Geolocator();
geolocator.DesiredAccuracyInMeters = 50;
Geoposition position =
await geolocator.GetGeopositionAsync(
TimeSpan.FromMinutes(1),
TimeSpan.FromSeconds(30));
center = new GeoCoordinate(
position.Coordinate.Latitude,
position.Coordinate.Longitude);
}
答案 0 :(得分:1)
你不应该这样做。您的视图模型永远不会直接与视图交互。您应该在视图模型中创建一个可绑定的GeoCoordinate
属性,并将其绑定到Map.Center
属性。
通过这种方式,您仍然可以清晰地分离UI和视图模型代码。
- 编辑:将以下属性添加到视图模型
GeoCoordinate _center;
public GeoCoordinate Center
{
get { return _center; }
set
{
_center = value;
OnPropertyChanged("Center"); // or whatever here
}
}
将Map.Center
绑定到XAML中的该属性。