2010-12-01 43 views
0

我試圖重現了Windows Phone 7 trainingkit的BingMaps樣本: http://msdn.microsoft.com/en-us/wp7trainingcourse_usingbingmapslab_topic2.aspx#_Toc271039352綁定WP7地圖控制視圖模型,問題的MapMode

但不是佈線代碼隱藏一切,我想使用一個視圖模型。

一切工作正常,除了綁定到模式屬性(天線或道路)導致XamlParseException。 有沒有問題,因爲它不是一個簡單的屬性?

這是原來的Xaml:

  <my:Map Name="Map" 
        CredentialsProvider="{Binding CredentialsProvider}"> 
       <my:Map.Mode> 
        <my:AerialMode ShouldDisplayLabels="True" /> 
       </my:Map.Mode> 
      </my:Map> 

的Map.Mode可以從代碼隱藏被改變。

相反,我正在嘗試以下操作:

 <my:Map x:Name="Map" 
       CredentialsProvider="{Binding CredentialsProvider}" 
       ZoomLevel="{Binding Zoom, Mode=TwoWay}" 
       Center="{Binding Center, Mode=TwoWay}" 
       Mode="{Binding MapMode}" /> 

和視圖模型的重要組成部分:

​​

感謝您的幫助!

回答

3

已解決。

「模式」不是依賴項屬性。所以它不能被綁定。

我的解決辦法:

  • 加入依賴屬性,以查看(=頁)
  • 綁定依賴性屬性來場所在視圖模型(通過代碼在構造)
  • 在設置模式地圖控制的的PropertyChanged回調處理

    //Constructor 
    public MainPage() 
    { 
        InitializeComponent(); 
        DataContext = new MainViewModel(); 
        Binding b = new Binding("MapMode"); 
        this.SetBinding(MapModeProperty, b); 
    } 
    
    
    //DependencyProperty. No need for corresponding CLR-property. 
    public static readonly DependencyProperty MapModeProperty = 
        DependencyProperty.Register("MapMode", typeof(MapMode), typeof(MainPage), 
        new PropertyMetadata(OnMapModeChanged)); 
    
    
    //Callback 
    private static void OnMapModeChanged(DependencyObject element, 
         DependencyPropertyChangedEventArgs e) 
    { 
        ((MainPage)element).Map.Mode = e.NewValue as MapMode; 
    } 
    

希望這個人能幫助別人!

0

我懷疑你需要在你的綁定中使用converter

+0

nope。轉換器沒有幫助 – 2010-12-02 00:27:07

相關問題