2011-06-29 87 views
1

bing地圖包含一個名爲setview的方法,用於計算地圖的右縮放級別。silverlight,C#,爲XAML添加額外控件

我自己用MVVM框架構建了一個地圖應用程序。我想爲我的地圖使用setview方法。但是因爲我在MVVM中構建了應用程序,所以在視圖模型中使用setview並不好,因爲viewmodel不知道任何有關map.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成立。 所以我創建的地圖類的額外控制:

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

您的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 
}