自定义一个事件聚合器

  public interface IEventTransmit
  {
      void Publish<T>(object obj = null) where T : EventBase, new();

      void Subscribe<T>(Action<object> executeMethod) where T : EventBase, new();
  }
  
  public class EventTransmit : IEventTransmit
  {
      private readonly Dictionary<Type, Action<object>> _keyValuePairs = new Dictionary<Type, Action<object>>();
      public void Publish<T>(object obj = null) where T : EventBase, new()
      {
          var eventType = typeof(T);

          if (_keyValuePairs.ContainsKey(eventType))
          {
              _keyValuePairs.TryGetValue(eventType, out var value);
              if (value != null)
              {
                  value.Invoke(Activator.CreateInstance(eventType));
              }
          }
      }

      public void Subscribe<T>(Action<object> executeMethod) where T : EventBase, new()
      {
          var eventType = typeof(T);
          if (!_keyValuePairs.ContainsKey(eventType))
          {
              _keyValuePairs.Add(eventType, executeMethod);

          }
      }
  }
  
   public class StudentEvent: EventBase
 {
     public int Id { get; set; }
     public string Name { get; set; }
 }

 public class EventBase
 {

 }

使用方法
MainWindowViewModel代码

 private void ExecutePublish()
 {
     _eventTransmit.Publish<StudentEvent>();
 }

HomeViewModel代码

 _eventTransmit.Subscribe<StudentEvent>(ExecuteMethod);

public void ExecuteMethod(object obj)
{
    StudentEvent stu=obj as StudentEvent;
    stu.Name = "Hello";
    Name = stu.Name;
   
}

本文作者:孤沉

本文链接:https://www.cnblogs.com/guchen33/p/18333709

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   孤沉  阅读(9)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开