Как динамически установить значения широты и долготы GeoCoordinate

Я пытаюсь динамически установить значения широты/долготы для элемента, отмеченного "<device:GeoCoordinate...". Я могу жестко закодировать это в XAML без проблем, но когда я пытаюсь установить его на лету, я получаю исключение нулевого указателя (внутри загруженного обработчика, показанного ниже)

XAML

<maps:Map ZoomLevel="6" Mode="Aerial" Grid.Row="1" Grid.ColumnSpan="2">
        <maps:Map.Center>
            <device:GeoCoordinate x:Name="theLocation"/>
        </maps:Map.Center>
        <maps:MapLayer x:Name="TheMapLayer"/>
    </maps:Map>

c#

    void ViewBingMaps_Loaded(object sender, RoutedEventArgs e)
    {
        //get lat + lng for the device and set it dynamically
        theLocation.Latitude = 41.5686949;
        theLocation.Longitude = -93.7943157;
    }

Можно ли установить это или я неправильно понимаю назначение устройства: GeoCoordinate?


person Toran Billups    schedule 01.08.2011    source источник


Ответы (2)


Просто повторно создайте экземпляр класса GeoCoordinate в коде программной части и установите для него центр карты:

theLocation = new System.Device.Location.GeoCoordinate(10.0, 10.0);
map1.Center = theLocation;
person Den Delimarsky    schedule 01.08.2011

Или, альтернативно, используйте подход MVVM:

<maps:Map Center="{Binding Center}">
    ...
</maps:Map>

Который затем привязывается к свойству GeoCoordinate с именем Center.

public GeoCoordinate Center
{
    get;
    private set;
}

Затем его можно динамически изменить из вашей ViewModel (у вас действительно есть ViewModel, верно?!)

Точно так же вы можете привязать ZoomProperty (что, как правило, довольно удобно) и почти все остальное!

person Claus Jørgensen    schedule 01.08.2011