我正在使用GeoLocator找出我的位置。这是方法:
private async void GetCurrentLocation()
{
Geolocator locationFinder = new Geolocator
{
DesiredAccuracyInMeters = 50,
DesiredAccuracy = PositionAccuracy.Default
};
try
{
Geoposition currentLocation = await locationFinder.GetGeopositionAsync(
maximumAge: TimeSpan.FromSeconds(120),
timeout: TimeSpan.FromSeconds(10));
String longitude = currentLocation.Coordinate.Longitude.ToString("0.00");
String latitude = currentLocation.Coordinate.Latitude.ToString("0.00");
MyTextBlock.Text = "Long: " + longitude + "Lat: " + latitude;
}
catch (UnauthorizedAccessException)
{
MyTextBlock.Text = "some message";
}
}
现在,我是我的观点我有这个代码(这里有硬编码的值,我想用上面的方法替换经度/纬度)。
<bm:Map ZoomLevel="7.5" Credentials="my key" x:Name="myMap">
<bm:Map.Center>
<bm:Location Latitude="48" Longitude="-122.580489" />
</bm:Map.Center>
</bm:Map>
我对这种开发很新,并且想知道如何将方法中的属性绑定到我视图中的long / lat。谢谢!
答案 0 :(得分:2)
这需要某种对象(通常称为ViewModel),Map
控件将从中获取DataContext
。 (DataContext向下移动可视树,从父级到子级,除非在任何子控件上显式设置。)ViewModel公开您希望视图(您的Window /其他可见控件)的信息,以便以某种方式直观地表示给用户。
请注意,WPF MVVM样式中ViewModels的一个关键组件是它实现了INotifyPropertyChanged
。此接口允许对象向UI发信号通知以上述方式绑定的值已更改,并且应更新UI以反映该值。
这是一个非常简单的ViewModel实现,用于您的目的:
// uses System.ComponentModel
public class YourViewModel : INotifyPropertyChanged
{
private double longitude;
public double Longitude
{
get { return longitude; }
set
{
longitude = value;
NotifyPropertyChanged("Longitude");
}
}
private double latitude;
public double Latitude
{
get { return latitude; }
set
{
latitude = value;
NotifyPropertyChanged("Latitude");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
这会公开一个Longitude属性和一个Latitude属性,您可以将其用于XAML中的绑定。如果您打算使用真正的MVVM,那么这些属性可能应该包含在模型对象中,而ViewModel应该将一组模型对象公开给View。就目前而言,这基本上是一个尽可能简单的例子。
通常,您只需使用一个简单的绑定将控件的属性连接到ViewModel的属性,如下所示:
<TextBlock Text="{Binding Longitude}" />
其中TextBlock
的DataContext已设置为YourViewModel的实例。
但是,看起来Bing Map
对象不是FrameworkElement,因此它没有DataContext属性,并且绑定稍微复杂一些,因为它需要StaticResource
s。我真的没有能力测试Bing地图API,但是binding to non-FrameworkElements上的这个链接应该会有所帮助。