从mainviewmodel访问xaml控件

时间:2014-01-14 05:47:34

标签: c# xaml windows-phone-8

我在我的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);
   }

1 个答案:

答案 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中的该属性。