【问题标题】:MvvmLight print message to debugMvvmLight 打印消息进行调试
【发布时间】:2013-10-18 13:47:12
【问题描述】:

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

【问题讨论】:

    标签: debugging windows-phone-7 mvvm mvvm-light


    【解决方案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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      在每个人都继承的抽象 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();
      

      【讨论】:

      • 不,太容易了。我已经有大量的 Send() 调用,不想将它们全部更改为 SendMessageWithDebug() 之类的。
      • @VitaliiVasylenko 然后您需要覆盖或包含并更改源,这似乎与您在原始帖子中的陈述相悖。
      • 也许是某种扩展?也许我在原始声明中并没有那么清楚。我的意思是,我正在寻找一种聪明的方法,它可以让我做最少的更改。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多