MVVM Calling command by name from CommandBindings
I might not fully understand how your commands are meant to be used, but the following things strike me as rather cumbersome:


Requiring a separate class for each command.
Command (class) names must be globally unique.
Having to pass context to a command.


Alternative

An alternative is to create a single RelayCommand class that wraps an Action:

public class RelayCommand : ICommand
{
    public RelayCommand(Action action) { ... }
    ...
}


In your view models, you can expose commands as bindable properties:

public class MyViewModel
{
    private ICommand _saveDataCommand;
    public ICommand SaveDataCommand
    {
        get { return _saveDataCommand ?? (_saveDataCommand = new RelayCommand(SaveData)); }
    }

    private void SaveData()
    {
        ...
    }
}


And in your views, you can bind to these commands:

&lt;Button Command="{Binding SaveDataCommand}" /&gt;


Now, you no longer have to create separate classes, just separate methods (and ICommand properties, but see below). Because those methods live in a specific view model, they likely already have access to the context they need, and their name only needs to be unique within that view model, not globally.

A possible further improvement

I've successfully been using the above approach in WPF, but having to create all those ICommand properties was still cumbersome. Initially I made a code snippet to make them easier to write, but eventually I settled on a different approach.

The data binding system in WPF (and perhaps also UWP, I'm not sure) not only uses reflection, it also checks if a data context implements ICustomTypeDescriptor, and if so, it'll use the GetProperties methods to detect additional 'properties'. I used that to create a view model base class that generates such a 'property' for each method that is marked with a custom [Command] attribute.

This took some work, but in the end it simplified things to just this:

public class MyViewModel : ViewModelBase
{
    [Command]
    public void SaveDataCommand()
    {
        ...
    }
}