【问题标题】:Windows Phone 8 Map, Databinding Map modes only works one timeWindows Phone 8 Map,Data Binding Map 模式只能使用一次
【发布时间】:2013-07-05 18:27:47
【问题描述】:

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

    /// <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 地图实现中存在错误或某些东西。 (或者我可能会错过一些完全明显的东西^^)

【问题讨论】:

  • 你能展示你的 OnPropertyChanged() 方法吗?通常,当您提出该方法时,您会将公共属性名称传递给该方法
  • 我更新了它,我用调试器检查了它,它使用了正确的名称。
  • 你有什么改变数据上下文的东西吗?
  • 据我所知,除了后面代码中的显式 DataContext = ... 之外,还能做什么?有趣的是,在调试 OnPropertyChanged() 时,我注意到处理程序变量的“InvocationCount”属性在第一次更新后减少了 1。所以它似乎真的从数据绑定中移除了自己 oO
  • 它也只有在成功更新时才会这样做。例如,将 Road 更改为 Terrain 时,将 Light 更改为 Dark 后,这会失败(现在不知道为什么)-> 地图上没有变化。但是 InvocationCount 并没有减少。然后,如果我将其更改为例如天线,它会起作用,地图更新和 InvocationCount 会减少。并且没有进一步的更新将起作用

标签: c# xaml data-binding windows-phone-8


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 2023-03-30
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    相关资源
    最近更新 更多