You should be able to update Geometry to show movement in GraphicsLayer.You can try the following code:XAML-code
xmlns:esri="http://schemas.esri.com/arcgis/client/2009">
<Grid>
<Grid.Resources>
<esri:SimpleMarkerSymbol x:Key="MySymbol" Color="Red" Size="10" Style="Circle"/>
<esri:SimpleRenderer x:Key="MyRenderer" Symbol="{StaticResource MySymbol}"/>
</Grid.Resources>
<esri:Map x:Name="MyMap">
<esri:ArcGISTiledMapServiceLayer Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
<esri:GraphicsLayer ID="MyGraphicsLayer" Renderer="{StaticResource MyRenderer}" />
</esri:Map>
</Grid>
C# Code-behind
public MainWindow()
{
InitializeComponent();
MyMap.Layers.LayersInitialized += (s, e) =>
{
AddGraphics();
MoveGraphics();
};
}
private void AddGraphics()
{
var layer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
double xmin = MyMap.Layers[0].FullExtent.XMin;
double ymin = MyMap.Layers[0].FullExtent.YMin;
var random = new Random();
for (int i = 0; i < 10; i++)
{
double x = xmin + (random.NextDouble() * 40000000);
double y = ymin + (random.NextDouble() * 40000000);
layer.Graphics.Add(new Graphic() { Geometry = new MapPoint(x, y) });
}
}
private void MoveGraphics()
{
var timer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(30)};
DateTime _lastOutput = DateTime.Now;
var layer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
int moveAmount = 180000;
var random = new Random();
timer.Tick += (s, e) =>
{
foreach (var g in layer.Graphics)
{
MapPoint pt = g.Geometry as MapPoint;
pt.X += (random.NextDouble() - 0.5) * moveAmount;
pt.Y += (random.NextDouble() - 0.5) * moveAmount;
}
var now = DateTime.Now;
if (now - _lastOutput > TimeSpan.FromSeconds(1))
{
_lastOutput = now;
}
};
timer.Start();
}