In the new version of the TableOfContents it no longer uses the common LiyerList. This approach the basemap behaved similar to the OperationalLayer and both would have a check box. With the new design there is a TocItem.Content which differs for Basemap layers.
This uses the BasemapItemTemplate and I see where this could be adjusted. Adding a check box isn't an issue but the issue is how would I tie the checkbox to the actual BaseLayer (we can assume there is only one). I tried this:
<DataTemplate>
	<Grid Margin="0,2">
		<Grid.ColumnDefinitions>
			<ColumnDefinition Width="Auto" />
			<ColumnDefinition Width="*" />
		</Grid.ColumnDefinitions>
		<CheckBox IsChecked="{Binding Content.BaseLayers[0].IsVisible, Mode=TwoWay}">
			<!--<CheckBox.Style>
				<Style TargetType="CheckBox">
					<Style.Triggers>
						<DataTrigger Binding="{Binding Content.CanChangeVisibility, Mode=OneTime}" Value="False">
							<Setter Property="Visibility" Value="Collapsed" />
						</DataTrigger>
					</Style.Triggers>
				</Style>
			</CheckBox.Style>-->
		</CheckBox>
		<TextBlock Text="{Binding Content.Name, Mode=OneWay}" Grid.Column="1" VerticalAlignment="Center" />
	</Grid>
</DataTemplate>I have tried to find something showing how to bind to a specific item in the ItemsSource without any luck
Thoughts?
I'd assume that works. Did you check the output window for any binding errors? That should give you a hint why the binding isn't working.
> we can assume there is only one
That is definitely a big assumption. A lot of the basemaps also have reference layers (ie labels).
Also check the sample which uses the context menu to completely replace the basemap.
arcgis-toolkit-dotnet/TableOfContentsSample.xaml.cs at master · Esri/arcgis-toolkit-dotnet · GitHub 
That might give you additional ideas how to handle this (like setting the basemap to null or empty).
Generally the basemap was designed to be operated on as a whole. I guess it would have been useful to also have a Visibility property on the basemap as a whole.
I guess should have been:
I can assume there is only one (because I know how the map is loaded in this application)
My attempt did not work, using the Binding to BaseLayers[0]. I'll look at the sample, for now I hold the BaseLayer and just turn on off in event handlers, which works. I would like to do in the template though.
private void ToggleButton_OnChecked(object sender, RoutedEventArgs e)
{
	_baseLayer.IsVisible = true;
}
private void ToggleButton_OnUnchecked(object sender, RoutedEventArgs e)
{
	_baseLayer.IsVisible = false;
}Thanks
-Joe