Привязка Twoway вызывает странное поведение в управлении картами для wp7 - PullRequest
2 голосов
/ 29 августа 2011

Я разрабатываю приложение для Windows Phone, используя элемент управления карты. Элемент управления привязывает свой центр и свойство zoomlevel к двум свойствам модели представления.

Элемент управления картой находится на странице, отдельной от главной страницы приложения. Каждый раз, когда пользователь перемещается на карту, страница связывается с моделью представления. Эта модель представления является одиночной (всегда один и тот же экземпляр).

в первый раз, когда я перехожу на карту, навигация по карте работает нормально, но когда я возвращаюсь и снова перемещаюсь к карте, навигация имеет некоторый отскок, как будто она отодвигается назад в исходное положение. Чтобы увидеть это поведение, сделайте следующее:

  • Перейдите к карте страницы, нажав на кнопку на главной странице. В это время управление картой работает, как и ожидалось.
  • Нажмите кнопку "Назад", чтобы вернуться на главную страницу.
  • Нажмите кнопку на главной странице еще раз, чтобы перейти к отображению во второй раз. Теперь при скольжении карты элемент управления ведет себя странно, возвращаясь к исходному положению перед скольжением.

Главная страница содержит только кнопку для перехода на страницу карты, которая выглядит следующим образом:

<phone:PhoneApplicationPage 
    x:Class="MapTester.Map"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:maps="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
    shell:SystemTray.IsVisible="True"
    DataContext="{Binding Path=MapViewModel, Source={StaticResource ViewModelLocator}}">

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <maps:Map Center="{Binding Center, Mode=TwoWay}"
                  ZoomLevel="{Binding ZoomLevel,Mode=TwoWay}"
                  ZoomBarVisibility="Visible"
                  CredentialsProvider=""
                  ScaleVisibility="Visible"></maps:Map>
    </Grid>

</phone:PhoneApplicationPage>

MapViewModel определяется в ViewModelLocator. Я создал решение, чтобы продемонстрировать тогда проблему. Вы можете скачать его здесь https://skydrive.live.com/?cid=25374d9051083633&sc=documents&id=25374D9051083633%21344#

У кого-нибудь есть идеи, как это исправить?

Спасибо!

1 Ответ

0 голосов
/ 29 августа 2011

Я не вижу, что здесь не так?Если вы не перемещаетесь назад (и, следовательно, не устанавливаете DataContext), Bing Maps всегда будет выполнять анимацию "отскока" от общего вида к центру.Вот как работает элемент управления, поэтому вы ничего не можете с этим поделать.

...