1. I would say that it depends on the type of UserControl, if it is "general", you should be able to modify the DataContext, since the internal control should not have anything to do with the DataContext. For example, if I create an ImageButton UserControl that provides the Caption and ImageSource , then they must be connected independently of the DataContext, and on the instance they can be connected, and the DataContext can also be changed, for example
<uc:ImageButton Caption="{Binding ButtonInfo.Caption}" ImageSource="{Binding ButtonInfo.Image}"/>
Here one could modify the DataContext to simplify the bindings a bit:
<uc:ImageButton DataContext="{Binding ButtonInfo}" Caption="{Binding Caption}" ImageSource="{Binding Image}"/>
If, on the other hand, the UserControl is a view for the view model, I would expect the UserControl to bind to the viewmodel properties inside, relative to the DataContext.
So, in the DataTemplate, where the current DataContext is already the viewmodel of this view, a simple instance should do without any action, i.e.
<v:StatisticsView />
If the transmitted view model is in the property of the current DataContext, you can also bind the DataContext:
<v:StatisticsView DataContext="{Binding StatisticsViewModel}"/>
2. This can be processed as I would say, especially if you have only three properties, it is not too much trouble to create them. You might want to consider some aspects, such as dependency, for example. Does it make sense to group all three propositions in an object?
3. As noted in 1. this should be obvious from the UserControl itself, if it is a StatisticsView , the user must pass it to the StatisticsViewModel (either implicitly, inheriting the current DataContext, or directly binding it).