I tried your sample and I faced the same issues so I think this would be a better approach.I adapted the following code from this sample:http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#SwitchMapXAML-code:
xmlns:esri="http://schemas.esri.com/arcgis/client/2009">
<Grid x:Name="LayoutRoot" Background="White">
<esri:Map x:Name="MyMap" Loaded="MyMap_Loaded">
<esri:ArcGISTiledMapServiceLayer ID="BaseLayer" Visible="True"
Url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_ShadedRelief_World_2D/MapServer" />
<esri:ArcGISDynamicMapServiceLayer ID="MyLayer"
Url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer" />
</esri:Map>
<Grid HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10" >
<Rectangle Fill="#77919191" Stroke="Gray" RadiusX="10" RadiusY="10" Margin="0" >
<Rectangle.Effect>
<DropShadowEffect/>
</Rectangle.Effect>
</Rectangle>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Background="Transparent" Margin="10">
<RadioButton x:Name="StreetsRadioButton"
Tag="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_ShadedRelief_World_2D/MapServer"
IsChecked="true" Margin="5,0,0,0" Foreground="White"
GroupName="Layers" Content="4326" Click="RadioButton_Click"/>
<RadioButton x:Name="TopoRadioButton"
Tag="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"
Margin="5,0,0,0" Foreground="White"
GroupName="Layers" Content="102100" Click="RadioButton_Click"/>
</StackPanel>
</Grid>
</Grid>
To switch out the base layer, you can first copy all other layers to another layer collection (just as you did), excluding the base layer that you want replaced.Clear the old map layers so that you can add the copied layers to another map control.Create a new map control.Add the new base layer to this new map and add the other layers.Once the new map control is set, you can replace the old map control with this.
private void RadioButton_Click(object sender, RoutedEventArgs e)
{
LayerCollection otherLayers = new LayerCollection();
Map map = this.LayoutRoot.Children[0] as Map;
foreach(var layer in map.Layers)
if(!string.Equals(layer.ID, "BaseLayer", StringComparison.InvariantCultureIgnoreCase))
otherLayers.Add(layer);
map.Layers.Clear();
ArcGISTiledMapServiceLayer arcgisLayer = new ArcGISTiledMapServiceLayer()
{
ID="BaseLayer",
Url = ((RadioButton)sender).Tag as string
};
Map newMap = new Map();
newMap.Layers.Add(arcgisLayer);
foreach (var layer in otherLayers)
newMap.Layers.Add(layer);
this.LayoutRoot.Children[0] = newMap;
}
private void MyMap_Loaded(object sender, RoutedEventArgs e)
{
MyMap.Focus();
}