Q:

How can I modify my application from VM making direct calls to the back end C# to instead use Xamarin MessagingCenter?

I am using ICommand like this but from what I understand it would be better to use the Xamarin MessagingCenter. Can someone suggest how I could change my code so as to use that and what changes would be needed. 
public partial class SettingsPageViewModel : BaseViewModel
{
    public ICommand OpenPageCmd { get; }
    public SettingsPageViewModel(SettingsPage settingsPage)
    {
        this.settingsPage = settingsPage;
        OpenPageCmd = new Command<string>((pageType) => settingsPage.OpenPage(pageType));
    }

public partial class SettingsPage : ContentPage
{

    SettingsPageViewModel vm;

    public SettingsPage()
    {
        InitializeComponent();
        vm = new SettingsPageViewModel(this);
        BindingContext = vm;
    }

    public void OpenPage(string pageType)
    {  
    }

A:

Since I answered your previous question and I understand the context, though it will make sense if I will reply. The misconceptions should be clear at this point as the question is about how to improve this code.
MessagingCenter is easy to use and at the same time to misuse. You have to make sure to subscribe and unsubscribe properly. Usually you do so on OnAppearing and OnDisappearing methods. Here is an example:
public partial class SettingsPageViewModel : BaseViewModel
{
    public ICommand OpenPageCmd { get; }
    public SettingsPageViewModel()
    {
        OpenPageCmd = new Command<string>((pageType) =>   MessagingCenter.Send(new MyFirstMessage(pageType), MyFirstMessage.Message));
    }
}
public class MyFirstMessage
{
    public static readonly string Message = nameof(MyFirstMessage);
    public string PageType { get; }

    public MyFirstMessage(string pageType)
    {
        PageType = pageType;
    }
}

public partial class SettingsPage : ContentPage
{
    SettingsPageViewModel vm;

    public SettingsPage()
    {
        InitializeComponent();
        vm = new SettingsPageViewModel(this);
        BindingContext = vm;
    }

   protected override void OnAppearing()
    {
        base.OnAppearing();
        MessagingCenter.Subscribe(this, MyFirstMessage.Message, (MyFirstMessage obj) => OpenPage(obj.PageType));
    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        MessagingCenter.Unsubscribe<MyFirstMessage>(this, MyFirstMessage.Message);
    }

    void OpenPage(string pageType)
    {

    }
}

Beside that, I can spot at least another 2 issues in the provided example:

The View(Page) is still aware of the ViewModel.
It seems that you need a NavigationService instead of using MessagingCenter.

Both issues can be easily solved, but the solution is to long to type and involves different aspects. Therefore, I would recommend to check architecture examples on github.

