如何将某些 WPF 事件处理程序转换为事件处理程序<E>?



我使用本文来实现弱引用处理程序模式。

在我发现WPF中的事件处理程序不是EventHandler的实例之前,代码真的很完美。如PropertyChangedEventHandler:

public delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e);

虽然我认为它们与EventHandler<PropertyChangedEventArgs>具有相同的签名,其中EventHandler是:

public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

我试图直接转换它,但c#说"我不能这样做"。
我的问题是能否顺利转换这两种委托?
它们之间有什么不同?

我有一些带有类型参数的委托,我像这样转换它们:

    public void AddHandler(EventHandlerUntyped<TKey> EventHandlerMethod)
    {
        SomeEventTakingTypedEventHandler += new TypedEventHandler<TKey, TValue>(EventHandlerMethod);
    }

这些是委托:

public delegate void TypedEventHandler<TKey, TValue>(object sender, TypedEventArgs<TKey, TValue> ItemInfo);
public delegate void EventHandlerUntyped<TKey>(object sender, EventArgsUntyped<TKey> ItemInfo);

PS:类型化事件参数继承了非类型化事件参数。

我知道这不是你想要的,但我认为这是一个很好的提示。您可以忽略TKey并尝试如下操作:
   new EventHandler<PropertyChangedEventArgs>(SomeMethodUsingPropertyChangedEventHandlerSignature).
   new PropertyChangedEventHandler(SomeMethodUsingCommonEventHandlerSignature);

相关内容

  • 没有找到相关文章

最新更新