Silverlight开发人员已经知道很多bing map, bing maps包含一个名为setview的方法,用于计算地图的右缩放级别。
我自己构建了一个带有MVVM框架的地图应用程序。我也想将setview方法用于我的地图。但是因为我在MVVM中构建了应用程序,所以在viewmodel中使用setview并不好,因为viewmodel对map.xaml一无所知
我有一张带有地图用户界面的XAML。 我将XAML连接到一个名为mapcontent.cs的视图模型。
在名为mapcontent.cs的viewmodel中,我有一个这样的属性:
public LocationRect MapArea {
get { return new LocationRect(new Location(52.716610, 6.921160), new Location(52.718330, 6.925840)); }
}
现在我想使用setview,但这与MVVM设置。 所以我创建了一个Map类的额外控件:
namespace Markarian.ViewModels.Silverlight.Controls {
/// <summary>
/// Map control class
/// </summary>
public class Map: MC.Map {
/// <summary>
/// Initializes a new instance of the Map class.
/// </summary>
public Map() {
}
/// <summary>
/// gets and sets setview.
/// </summary>
public MC.LocationRect ViewArea { get; set; } <<<setview will come here
}
}
现在的解决方案是,我可以在我的XAML中使用ViewArea并将其与MapArea绑定。 唯一的问题是我不能在XAML中使用Viewarea属性,有谁知道为什么?
答案 0 :(得分:0)
您的ViewArea属性必须是DependencyProperty才能支持绑定。你拥有的是一个普通的旧CLR财产。
要挂接SetView调用,您必须向依赖项属性添加更改处理程序。这个article有一个例子/解释,但它会像:
public MC.LocationRect ViewArea {
get { return (MC.LocationRect)GetValue(ViewAreaProperty); }
set { SetValue(ViewAreaProperty, value); }
}
public static readonly DependencyProperty ViewAreaProperty = DependencyProperty.Register("ViewArea", typeof(MC.LocationRect),
typeof(Map), new PropertyMetadata(new MC.LocationRect(), OnViewAreaChanged));
private static void OnViewAreaChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
var map = d as Map;
// Call SetView here
}