Windows phone 7 更改图钉。在ObservableCollection Don';在重新绘制地图之前,不要影响图钉

Windows phone 7 更改图钉。在ObservableCollection Don';在重新绘制地图之前,不要影响图钉,windows-phone-7,binding,geolocation,mvvm-light,bing-maps,Windows Phone 7,Binding,Geolocation,Mvvm Light,Bing Maps,第一个问题,到目前为止,我在阅读答案时得到了很大的帮助。这是我找不到任何答案的事情。所以来了 我们有一个Bing地图,其MapItemsControl绑定到ObservableCollection属性。向集合中添加/删除项目时,地图会正确更新 现在我的问题是:如何更新/绑定集合中图钉的位置,使其反映在地图上,而无需通过移动/缩放重新绘制地图? 以下是Map.xaml: <phone:PhoneApplication ... DataContext="{Binding Source=

第一个问题,到目前为止,我在阅读答案时得到了很大的帮助。这是我找不到任何答案的事情。所以来了

我们有一个Bing地图,其
MapItemsControl
绑定到
ObservableCollection
属性。向集合中添加/删除项目时,地图会正确更新

现在我的问题是:如何更新/绑定集合中
图钉的位置,使其反映在地图上,而无需通过移动/缩放重新绘制地图?

以下是Map.xaml:

<phone:PhoneApplication ...
    DataContext="{Binding Source={StaticResource Locator}, Path=Main}">
    <maps:Map ...>
        <maps:MapItemsControl ItemsSource="{Binding MapItems}"/>
    </maps:Map>
</phone:PhoneApplication>

x:Name=myMap-on-map控件

当您要重新绑定地图图钉时

设置 myMap.Children.Clear()

然后重新添加您的PIN


您可以通知您的数据更改

,正如我之前在长时间的谷歌搜索后评论的那样,我终于找到了一个似乎不再可用的解决方法。诀窍是在更改Pushpin.Location后在地图视图上调用
SetView

我想这是因为Pushpin没有实现INotifyPropertyChanged接口我应该创建一个扩展并实现接口吗?因为Pushpin.Location是一个依赖属性,它不需要实现INotifyPropertyChanged来参与数据绑定。Koodmyyra您能展示一下LastKnownLocation属性的实现吗?扩展和接口对我来说太多了。。。经过长时间的谷歌搜索,我终于找到了这一点。诀窍是在更改
图钉
位置
后,在地图视图上调用
设置视图
。还有其他建议吗?@BojinLi更新了问题。里面没有什么特别的东西。广播消息用于触发
SetView
。我明白你的意思。这种方法的问题是,我不希望每次更新一个项目时都清除列表。该列表可能有几十个或数百个项目(公共交通车辆),每次重新创建它都是一个巨大的缺点。还是会?
#region MapItems

#region MapItems Property

/// <summary>
/// The <see cref="MapItems" /> property's name.
/// </summary>
public const string MapItemsPropertyName = "MapItems";

private ObservableCollection<Pushpin> _MapItems =
    new ObservableCollection<Pushpin>();

/// <summary>
/// Sets and gets the MapItems property.
/// Changes to that property's value raise the PropertyChanged event. 
/// </summary>
public ObservableCollection<Pushpin> MapItems
{
    get
    {
        return _MapItems;
    }
    set
    {
        if (_MapItems == value)
        {
            return;
        }

        _MapItems = value;
        RaisePropertyChanged(MapItemsPropertyName);
    }
}

#endregion

#region OwnLocation

private Pushpin OwnLocation;

private void InitializeOwnLocation()
{
    OwnLocation = new Pushpin()
    {
        Style = App.Current.Resources["OwnLocationStyle"] as Style
    };
    Binding b = new Binding {
        Path = new PropertyPath("LastKnownLocation")
    };
    OwnLocation.SetBinding(Pushpin.LocationDependencyProperty, b);
    MapItems.Add(OwnLocation);
}

#endregion

...

#endregion
/// <summary>
/// The <see cref="LastKnownLocation" /> property's name.
/// </summary>
public const string LastKnownLocationPropertyName = "LastKnownLocation";

private GeoCoordinate _LastKnownLocation;

/// <summary>
/// Sets and gets the LastKnownLocation property.
/// Changes to that property's value raise the PropertyChanged event. 
/// </summary>
public GeoCoordinate LastKnownLocation
{
    get
    {
        return _LastKnownLocation;
    }

    private set
    {
        if (_LastKnownLocation == value)
        {
            return;
        }

        var oldValue = _LastKnownLocation;
        _LastKnownLocation = value;
        Settings["LastKnownLocation"] = _LastKnownLocation;
        RaisePropertyChanged(LastKnownLocationPropertyName, oldValue, value, true);
    }
}