我正在使用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;
}
但该符号仍未显示在地图上。
答案 0 :(得分:0)
我认为您必须使用GraphicsOverlayCollection而不是ObservableCollection,因为MapView.GraphicOverlays是GraphicsOverlayCollection而不是ObservableCollection。像
public GraphicsOverlayCollection<GraphicsOverlay> GraphicsOverlays { get; set; }