MVVM light Messenger Helper-Klasse

Für verschiedene Szenarien, in denen ich den MVVMlight Messenger nutze, habe ich mir eine kleine Helferklasse geschrieben.

Diese erlaubt je nach Situation Nachrichten asynchron zu verschicken, wahlweise mit GUI-Zugriff oder auch ohne. Vor der Nutzung des Dispatchers muss dieser einmal initialisiert werden, z.B. beim Start der Anwendung in der App.xml.cs:

DispatcherHelper.Initialize();

Der Code

/// <summary>
/// Helper class for the MVVM light messenger
/// </summary>
public class MessengerHelper
{
    /// <summary>
    /// Send an async message with UI invocation
    /// </summary>
    /// <param name="msg"></param>
    public static async void SendMessageInvokeUiAsync<T>(T msg)
    {
        await Task.Factory.StartNew(() =>
        {
            DispatcherHelper.CheckBeginInvokeOnUI(() =>
            {
                Messenger.Default.Send(msg);
            });
        });
    }

    /// <summary>
    /// Send an message async
    /// </summary>
    /// <param name="msg"></param>
    public static async void SendMessageAsync<T>(T msg)
    {
        await Task.Factory.StartNew(() =>
        {
            DispatcherHelper.CheckBeginInvokeOnUI(() =>
            {
                Messenger.Default.Send(msg);
            });
        });
    }

    /// <summary>
    /// Send an synchronous message
    /// </summary>
    /// <param name="msg"></param>
    public static void SendMessage<T>(T msg)
    {
        Messenger.Default.Send(msg);
    }
}

Anschließend kann die Klasse leicht verwendet werden.

MessengerHelper.SendMessageInvokeUiAsync(msg);

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert