silverlight,C#,为XAML添加了额外的控件

本文关键字:控件 添加 XAML silverlight | 更新日期: 2023-09-27 18:00:37

正如许多bing地图silverlight开发人员已经知道的那样,bing贴图包含一个名为setview的方法,用于计算贴图的右缩放级别。

我自己用MVVM框架构建了一个地图应用程序。我想对我的地图也使用setview方法。但是,因为我在MVVM中构建了该应用程序,所以在视图模型中使用setview是不好的,因为视图模型对map.xaml 一无所知

我有一个带有地图UI的XAML。我将XAML连接到一个名为mapcontent.cs.的视图模型

在名为mapcontent.cs的视图模型中,我有一个类似的属性:

 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,有人知道为什么吗?

silverlight,C#,为XAML添加了额外的控件

ViewArea属性必须是DependencyProperty才能支持绑定。您所拥有的只是一个普通的旧CLR属性。

要挂接SetView调用,您必须向依赖项属性添加一个更改处理程序。这篇文章有一个例子/解释,但它会像:

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
}