silverlight,C#,为XAML增加了额外的控制

时间:2011-06-29 15:38:09

标签: c# silverlight

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属性,有谁知道为什么?

1 个答案:

答案 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
}