2011-06-29 6 views
1

シルバーライトの開発者が既に知っているように、 のbingマップには、地図の右のズームレベルを計算するsetviewというメ​​ソッドが含まれています。silverlight、C#、XAMLの特別なコントロールを追加

私自身MVVMフレームワークを使ってマップアプリケーションを構築しました。私は自分のマップにもsetviewメソッドを使いたい。しかし、私はMVVMでアプリケーションを構築したので、viewmodelはmap.xamlについて何も知らないので、viewmodelでsetviewを使うのは良いことではありません。

私はマップUIでXAMLを持っています。 mapcontent.csというビューモデルにXAMLを接続しました。 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

バインディングをサポートするには、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 
} 
関連する問題