This sounds serious.However, I am not able to repro it.I tried the following code. It is close to what you have, except that I find no reason for the check if layer is already initialized since the check is done at layer creation where layer has not yet been added to the map. I also set Extent so I can define SpatialReference, but you can run the sample without it. I am using SampleServer3. I also added UpdateCompleted event to show in your OutputWindow how many features exist in the feature layer for that given extent (since the layers are OnDemand mode).XAML-Code:
<Grid x:Name="LayoutRoot" Background="White">
<esri:Map x:Name="MyMap">
<esri:Map.Extent>
<esri:Envelope XMin="-118.207462406372" YMin="33.5439110882534" XMax="-117.255773795146" YMax="34.8265277847467" >
<esri:Envelope.SpatialReference>
<esri:SpatialReference WKID="4326"/>
</esri:Envelope.SpatialReference>
</esri:Envelope>
</esri:Map.Extent>
</esri:Map>
<Button Content="add layers" VerticalAlignment="Top" HorizontalAlignment="Center" Click="Button_Click"/>
</Grid>
Code-Behind:
private void Button_Click(object sender, RoutedEventArgs e)
{
ArcGISDynamicMapServiceLayer dynamicLayer = new ArcGISDynamicMapServiceLayer()
{
Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/MapServer"
};
dynamicLayer.Initialized += dynamicLayer_Initialized;
dynamicLayer.Initialize();
}
void dynamicLayer_Initialized(object sender, System.EventArgs e)
{
ArcGISDynamicMapServiceLayer layer = sender as ArcGISDynamicMapServiceLayer;
MyMap.Layers.Add(layer);
string featureService =layer.Url.Replace("MapServer", "FeatureServer");
foreach (var l in layer.Layers)
{
FeatureLayer featureLayer = new FeatureLayer()
{
ID = l.Name,
Mode = FeatureLayer.QueryMode.OnDemand,
Url = string.Format("{0}/{1}",featureService, l.ID)
};
featureLayer.UpdateCompleted += featureLayer_UpdateCompleted;
featureLayer.Initialized += featureLayer_Initialized;
featureLayer.Initialize();
}
}
void featureLayer_UpdateCompleted(object sender, System.EventArgs e)
{
FeatureLayer layer = sender as FeatureLayer;
System.Diagnostics.Debug.WriteLine("{0} Graphics Count: {1}", layer.ID, layer.Graphics.Count);
}
void featureLayer_Initialized(object sender, System.EventArgs e)
{
FeatureLayer layer = sender as FeatureLayer;
MyMap.Layers.Add(layer);
}