1

我有一个具有属性的模型:

    /// <summary>
    /// List of available map modes
    /// </summary>
    public Array MapModes { get; private set; } 

    /// <summary>
    /// The current cartographic mode of the map
    /// </summary>
    public MapCartographicMode MapMode
    {
        get { return _mapMode; }
        set
        {
            if (value == _mapMode) return;
            _mapMode = value;
            OnPropertyChanged();
        }
    }

    /// <summary>
    /// List of available map color modes
    /// </summary>
    public Array MapColorModes { get; private set; }

    //The current color mode of the map
    public MapColorMode MapColorMode
    {
        get { return _mapColorMode; }
        set
        {
            if (value == _mapColorMode) return;
            _mapColorMode = value;
            OnPropertyChanged();
        }
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

我的 XAML 看起来像这样:

 <maps:Map x:Name="MainMap"
                                  Height="{Binding MapHeight}"
                                  ColorMode="{Binding MapColorMode, Converter={StaticResource MapTestConverter}}">

属性在另一个页面上更新。

<toolkit:ListPicker Header="Map mode"
                                    ItemsSource="{Binding MapModes}"
                                    SelectedItem="{Binding Path=MapMode, Mode=TwoWay}"/>
                <toolkit:ListPicker Header="Map color mode"
                                    ItemsSource="{Binding MapColorModes}"
                                    SelectedItem="{Binding Path=MapColorMode, Mode=TwoWay}"/>

现在 ListPickers 的绑定工作正常,模型中的值始终代表上次在这里选择的内容。

Map 绑定也有效,它获取初始值并在我第一次更改属性时更新。

但就是这样。在第一次属性更改后,它拒绝更新。(不调用虚拟 IValueConverter)。

该模型仍然很好地引发了属性更改事件,并且该属性在模型中具有正确的值(例如在页面加载时手动分配它可以完美地工作)

由于似乎绑定正在“损坏”,因此我尝试在每次更新属性时重新创建它

        Binding b = new Binding("MapMode");
        BindingOperations.SetBinding(MainMap, Map.CartographicModeProperty, b);

这行得通。我开始认为 wp8 地图实现中存在错误或某些东西。(或者我可能会错过一些完全明显的东西^^)

4

1 回答 1

1

我有同样的。解决方案是为绑定提供 Mode=TwoWay。我不知道为什么会这样,但似乎。在这个博客上,我已经看到了这个解决方案: http: //dotnetbyexample.blogspot.ch/2012/10/introducing-new-windows-8-map-control.html

于 2013-08-30T03:49:04.870 回答