1

有没有一种简单的方法可以打印所有 Messenger.Default.Send() 以进行调试?不想覆盖它们。

4

2 回答 2

1

是的,所以我最终使用了自己的 Messenger 包装器。没有聪明的解决方案,只是简单的包装。以防万一,其他人需要它:

public static class MvvmLightMessenger
{
    public static void Register<TMessage>(object recipient, Action<TMessage> action)
    {
        Messenger.Default.Register(recipient,action);
    }

    public static void Register<TMessage>(object recipient, bool receiveDerivedMessagesToo, Action<TMessage> action)
    {
        Messenger.Default.Register(recipient, receiveDerivedMessagesToo, action);
    }

    public static void Register<TMessage>(object recipient, object token, Action<TMessage> action)
    {
        Messenger.Default.Register(recipient, token, action);
    }

    public static void Register<TMessage>(object recipient, object token, bool receiveDerivedMessagesToo, Action<TMessage> action)
    {
        Messenger.Default.Register(recipient, token, receiveDerivedMessagesToo, action);
    }





    public static void Send<TMessage>(TMessage message)
    {
        Debug.WriteLine("{!} Message: " + message);
        Messenger.Default.Send<TMessage>(message);
    }

    public static void Send<TMessage, TTarget>(TMessage message)
    {
        Debug.WriteLine("{!} Message: " + message + " to target: " + typeof(TTarget));
        Messenger.Default.Send<TMessage, TTarget>(message);
    }

    public static void Send<TMessage>(TMessage message, object token)
    {
        Debug.WriteLine("{!} Message: " + message + " token: " + token);
        Messenger.Default.Send<TMessage>(message, token);
    }







    public static void Unregister<TMessage>(object recipient)
    {
        Messenger.Default.Unregister<TMessage>(recipient);
    }

    public static void Unregister<TMessage>(object recipient, Action<TMessage> action)
    {
        Messenger.Default.Unregister<TMessage>(recipient, action);
    }

    public static void Unregister<TMessage>(object recipient, object token)
    {
        Messenger.Default.Unregister<TMessage>(recipient, token);
    }

    public static void Unregister<TMessage>(object recipient, object token, Action<TMessage> action)
    {
        Messenger.Default.Unregister<TMessage>(recipient, token, action);
    }
}
于 2013-10-14T22:38:11.333 回答
1

在每个人都继承的抽象 ViewModel 中创建一个函数,该函数使用定义或全局变量来确定它是否也/而不是调试。如果您以 Debug 或 Release 身份运行,也可能出现这种情况。

public abstract BaseViewModel
    public SendMessage()
    {
        if(DEBUG) // The global variable, or definition, or current run type - whatever
            Debug.WriteLine();
        // else // Commented if you want to always send, uncomment if you want to send instead.
        Messenger.Default.Send();
    }


public RealViewModel : BaseViewModel
...
    SomeMethod()
    {
        ...
        base.SendMessage();
于 2013-10-11T15:33:01.453 回答