Графика не обновляется в mapview из viewmodel graphicsoverlay

Я разрабатываю приложение с ArcGIS Runtime SDK для .Net и следую шаблону MVVM, в моей модели ViewModel у меня есть ObservableCollection of GraphicsOverlay, который я привязал к MapView в моем представлении, теперь, когда я добавляю новый GraphicsOverlay в ObservableCollection и добавляю Графика в нем, графика не отражается в View,

Я реализовал 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;
    }

Но по-прежнему символ не отображается на карте.

Является ли свойство GraphicsOverlay.Graphics ObservableCollection? В противном случае вам придется заменить GraphicsOverlays[0] новым GraphicsOverlay (который вы, по-видимому, уже создали, но никогда не используете).

Clemens 31.10.2018 12:26

@Clemens нет GraphicsOverlay.Graphics не является ObservableCollection, позвольте мне попробовать с новым GraphicsOverlay.

user167124 31.10.2018 12:38
1
2
231
1

Ответы 1

Я думаю, вам нужно использовать GraphicsOverlayCollection вместо ObservableCollection, поскольку MapView.GraphicOverlays - это GraphicsOverlayCollection, а не ObservableCollection. Что-то вроде

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

Другие вопросы по теме