Windows Phone 8地图、数据绑定地图模式只能工作一次
本文关键字:工作 一次 8地图 Phone 数据绑定 模式 地图 Windows | 更新日期: 2023-09-27 18:21:08
我有一个具有属性的模型:
/// <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映射实现中有一个bug或其他什么。(或者我可能只是错过了一些非常明显的^^)
我也有同样的经历。解决方案是为绑定提供Mode=TwoWay。我不知道为什么会这样,但似乎是这样。在这个博客上,我看到了这个解决方案:http://dotnetbyexample.blogspot.ch/2012/10/introducing-new-windows-8-map-control.html