【问题标题】:Binding WP7 Maps control to ViewModel, Problem with MapMode将 WP7 Maps 控件绑定到 ViewModel,MapMode 出现问题
【发布时间】:2010-12-01 23:35:16
【问题描述】:

我正在尝试重现 Windows Phone 7 培训套件的 BingMaps 示例: http://msdn.microsoft.com/en-us/wp7trainingcourse_usingbingmapslab_topic2.aspx#_Toc271039352

但我不想在代码隐藏中连接所有内容,而是使用视图模型。

除了绑定到 Mode 属性(空中或道路)会导致 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}" />

以及视图模型的重要部分:

    private MapMode _mapMode = new AerialMode(true);
    public MapMode MapMode
    {
        get { return _mapMode; }
        set
        {
            _mapMode = value;
            RaisePropertyChanged("MapMode");
        }
    }

    private void ChangeMapMode()
    {
        if (MapMode is AerialMode)
        {
            MapMode = new RoadMode();
        }
        else
        {
            MapMode = new AerialMode(true);
        }
    }

感谢您的帮助!

【问题讨论】:

    标签: silverlight mvvm windows-phone-7 mvvm-light


    【解决方案1】:

    解决了。

    “模式”不是依赖属性。所以不能绑定。

    我的解决方法:

    • 添加了依赖属性以查看(=页面)
    • 将依赖属性绑定到视图模型中的属性(通过构造函数中的代码)
    • 在 propertyChanged 回调处理程序中设置 Map 控件的模式

      //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;
      }
      

    希望这个可以帮助其他人!

    【讨论】:

      【解决方案2】:

      我怀疑您需要在绑定中使用converter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多