2010-12-01 100 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