Good idea, that was easier... here is what I did then:Setup in controls loaded event:
//Set table of contents to show all services
List<String> layerIDs = new List<String>();
foreach (Layer layer in Maps[0].Layers)
{
layerIDs.Add(layer.ID);
//Set layer changed event to keep multiple maps in sync
if (layer is ArcGISDynamicMapServiceLayer)
{
layer.PropertyChanged += Layer_PropertyChanged;
((ArcGISDynamicMapServiceLayer)layer).VisibilityChanged += Layer_VisibilityChanged;
}
}
layerIDs.Reverse();
Legend.LayerIDs = layerIDs.ToArray();
To support service on/off
protected void Layer_PropertyChanged(Object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Visible" && MapSplitter != null && MapSplitter.LockMaps)
{
Layer layer = (Layer)sender;
for (Int32 i = 1; i < Maps.Count; i++)
Maps.Layers[layer.ID].Visible = layer.Visible;
}
}
To support sub-layer on/off
protected void Layer_VisibilityChanged(Object sender, EventArgs e)
{
if(MapSplitter != null && MapSplitter.LockMaps)
{
Layer layer = (Layer)sender;
for (Int32 i = 1; i < Maps.Count; i++)
{
if (layer is ArcGISDynamicMapServiceLayer)
((ArcGISDynamicMapServiceLayer)Maps.Layers[layer.ID]).VisibleLayers = ((ArcGISDynamicMapServiceLayer)layer).VisibleLayers;
}
}
}
FYI, MapSplitter is a control I made for hidding and showing more than one map. Hope this maybe helps someone else in the future.Thanks a lot for your help Dominique!