无法从ViewModel GraphicsOverlay在MapView中更新图形

时间:2018-10-31 11:22:55

标签: wpf arcgis

我正在使用ArcGIS Runtime SDK for .Net开发一个应用程序,并遵循MVVM模式,在ViewModel中,我有一个GraphicsOverlay的ObservableCollection,已将其绑定到View中的MapView,现在,当我向该MapView中添加新的GraphicsOverlay时, ObservableCollection并在其中添加图形,图形不会在视图中反射,

我已经实现了INotifyPropertyChanged,其他所有功能都可以在ViewModel上正常工作

public class MapViewModel : BaseViewModel
{
private Map map;

public Map Map
{
get { return this.map; }
set { this.map = value; }
}
public ObservableCollection<GraphicsOverlay> GraphicsOverlays { get; set; }



public MapViewModel()
{
GraphicsOverlays = new ObservableCollection<GraphicsOverlay>();
}

在任何事件调用的我的方法中

public void UpdateMarker(MapPoint point)
{
GraphicsOverlays[0].Graphics.Clear();

// Create a symbol to symbolize the point
SimpleMarkerSymbol symbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.X, System.Drawing.Color.Yellow, 20);

// Create the graphic
Graphic symbolGraphic = new Graphic(point, symbol);

// Add the graphic to the graphics overlay
var newGraphicsOverlay=new GraphicsOverlay(); 
GraphicsOverlays[0].Graphics.Add(symbolGraphic);

}

在我看来,我有

<esri:MapView x:Name="MyMapView" Grid.Column="0" DataContext=" 
{StaticResource MapVM}" GraphicsOverlays="{Binding GraphicsOverlays}" Map=" 
{Binding Map}" Cursor="{Binding MapViewCursor}">

我找不到任何可以做到这一点的示例,因此如何做到这一点,我是arcGIS的新手,

更新

我已经像这样更新了UpdateMarker方法

 public void UpdateMarker(MapPoint point)
    {
        GraphicsOverlays[0].Graphics.Clear();

        // Create a symbol to symbolize the point
        SimpleMarkerSymbol symbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.X, System.Drawing.Color.Yellow, 20);

        // Create the graphic
        Graphic symbolGraphic = new Graphic(point, symbol);
        // Add the graphic to the graphics overlay
        var newGraphicsOverlay = new GraphicsOverlay();
        newGraphicsOverlay.Graphics.Add(symbolGraphic);
        GraphicsOverlays[0] = newGraphicsOverlay;
    }

但该符号仍未显示在地图上。

1 个答案:

答案 0 :(得分:0)

我认为您必须使用GraphicsOverlayCollection而不是ObservableCollection,因为MapView.GraphicOverlays是GraphicsOverlayCollection而不是ObservableCollection。像

public GraphicsOverlayCollection<GraphicsOverlay> GraphicsOverlays { get; set; }