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 .
您没有将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的居中和缩放
希望这对你有帮助!