You could put another control in your view that would lay over top of the rest of it when your view model is loading.
For instance, if your view is in the 2nd row of a table, you could also put a Border that will take up the whole row while loading so the user couldn't do anything while it's visible. IsWorking
below would just be a property in your view model you set when you start loading data or are doing anything that you don't want the user to use the control.
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<myviews:View1 Grid.Row="0" />
<myviews:View2 Grid.Row="1" />
<Border Background="#30505050"
Grid.Row="1"
Visibility="{Binding Path=IsWorking, Converter={x:Static CommonConverters:BooleanToVisibilityConverter.Default}}"/>
</Grid>
You could also put the Border into your own control or user control if you wanted to do more with it like adding animations that'll play while working.