Skip to main content
 首页 » 编程设计

c#之双向绑定(bind)导致 wp7 的 map 控件出现奇怪的行为

2024年01月11日31www_RR

我正在使用 map 控件为 Windows Phone 开发应用程序。 map 控件将其 center 和 zoomlevel 属性绑定(bind)到 View 模型上的两个属性。

map 控件位于与应用程序主页分开的页面上。每次用户移动到 map 时,页面都会绑定(bind)到 View 模型。这个 View 模型是一个单例(总是同一个实例)。

我第一次移动到 map 时,在 map 上导航工作正常,但当我返回并再次导航到 map 时,导航有某种弹跳,就像它被推回到其初始位置一样。 要查看此行为,请执行以下操作:

  • 单击主页上的按钮导航到 mapPage bij。此时 map 控件按预期工作。
  • 点击后退按钮返回主页。
  • 再次点击主页上的按钮,第二次导航到 map 页面。现在,当滑动 map 时,控件会在滑动前弹回到原始位置,从而表现得很奇怪。

主页仅包含一个导航至 map 页面的按钮,如下所示:

<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#

有人知道如何解决这个问题吗?

谢谢!

请您参考如下方法:

我不明白这里有什么问题吗?除非您向后导航(因此不设置 DataContext),否则 Bing map 将始终执行从全局 View 到中心位置的“弹跳”动画。这就是控件的工作方式,所以您对此无能为力。