Комментарии 5
А мне не нравится задавать команды конструированием в ViewModel-классе. Предпочитаю подход, при котором команды задаются методами презентера (контроллера), помеченными специальным атрибутом. Пример использования такого подхода можно посмотреть здесь.
Так вы же используете модель MVP, а тут речь в первую очередь о MVVM.
Да, но по сути это то же самое, просто команды выделены в отдельный класс (презентер), а не болтаются вместе с данными. Так что это что-то среднее между классическим MVP (в котором работа с data binding не предусмотрена) и MVVM. Мне такой подход представляется очень удобным.
Мне кажется у вас многовато лишнего кода. Так:

public class MainViewModel : ViewModel
{
    public MainViewModel()
    {
      //  Создание команды - вызов DoSimpleCommand.
      SimpleCommand = new Command(DoSimpleCommand);
    }

    /// <summary>
    /// The SimpleCommand function.
    /// </summary>
    private void DoSimpleCommand()
    {
      //  Добавляем сообщение
      Messages.Add("Вызываем 'DoSimpleCommand'.");
    }

    public ICommand SimpleCommand {get; private set;}
}


Попроще будет

Ну и асинхронные команды сейчас намного проще через async/await делать
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.