Bing以MVVM模式映射WPF.中心不工作

本文关键字:工作 WPF 映射 MVVM 模式 Bing | 更新日期: 2023-09-27 17:53:46

大家好!我最近开始为Windows PC设备构建一个飞行仪表板,包括MVVM模式的必应地图WPF控件(至少尽可能多)。

在网上搜索了一段时间后,我能够根据app.config中的键提供CredentialsProvider,并根据当前设备的位置实现Bing控制地图的自动定心。

XAML:

<m:Map ZoomLevel="16" Mode="Aerial" CredentialsProvider="{Binding BingMapsCredentials}" Grid.Row="1" Grid.ColumnSpan="2" Center="{Binding DevPosition}"/>

ViewModel:

    private readonly CredentialsProvider bingMapsCredentials = new ApplicationIdCredentialsProvider(ConfigurationSettings.AppSettings.Get("BingMapsKey"));
    private readonly double nDefaultLatitude = double.Parse(ConfigurationSettings.AppSettings.Get("DefaultLongitude"), System.Globalization.CultureInfo.InvariantCulture);
    private readonly double nDefaultLongitude = double.Parse(ConfigurationSettings.AppSettings.Get("DefaultLatitude"), System.Globalization.CultureInfo.InvariantCulture);
    private GeoCoordinate nDevicePosition;
    public CredentialsProvider BingMapsCredentials
    {
        get { return bingMapsCredentials; }
    }
    public Location DevPosition
    {
        get { return new Location(nDeviceLat, nDeviceLon); }
    }
    public double nDeviceLon
    {
        get
        {
            if (nDevicePosition.IsUnknown)
                return nDefaultLongitude;
            else
                return nDevicePosition.Longitude; }
        set { nDevicePosition.Longitude = value; }
    }
    public double nDeviceLat
    {
        get
        {
            if (nDevicePosition.IsUnknown)
                return nDefaultLatitude;
            else
                return nDevicePosition.Latitude;
        }
        set { nDevicePosition.Latitude = value; }
    }

虽然绑定CredentialsProvider可以正常工作,但设置中心位置根本不行。地图显示正确,但在一个偏僻的地方。调试器显示没有调用location上的Get属性。在输出窗口中也没有WPF警告/错误跟踪。

我错过了什么吗?

任何帮助都是感激的。

p .

Bing以MVVM模式映射WPF.中心不工作

您没有将nDeviceLat和nDeviceLon绑定到DevPosition。因此,这将只在调用get方法时拉入正确的值。如果位置被移动,就没有什么可以触发UI更新。试着这样做:

public Location DevPosition { get; set; }
public double nDeviceLon
{
    get
    {
        if (nDevicePosition.IsUnknown)
            return nDefaultLongitude;
        else
            return nDevicePosition.Longitude; }
    set 
{ 
    nDevicePosition.Longitude = value; 
    DevPosition = new Location(nDeviceLat, nDeviceLon);
}
}
public double nDeviceLat
{
    get
    {
        if (nDevicePosition.IsUnknown)
            return nDefaultLatitude;
        else
            return nDevicePosition.Latitude;
    }
    set { 
    nDevicePosition.Latitude = value; 
    DevPosition = new Location(nDeviceLat, nDeviceLon);
}
}

这似乎是一个常见的问题。这里有几个问题,但基本上你想使用setView()而不是设置为Center

这里有两篇关于在WPF中使用必应地图的优秀文章,它们还更多地解释了center属性:
http://www.mobilemotion.eu/?p=1077〈enhttp://visualstudiomagazine.com/Articles/2012/04/01/Map-Your-Apps.aspx?Page=2

涉及/可能重复:必应地图WPF的居中和缩放

希望这对你有帮助!