1 つの解決策は、偽のバッキング イベントとルックアップ ディクショナリを作成して、イベントの転送に必要な情報を格納することです。例えば:
public event EventHandler<Object> Changed
{
add
{
// get fake token so that we can return something and/or unsubscribe
EventRegistrationToken token = _changed.AddEventHandler(value);
// subscribe and store the token-handler pair
_otherClass.Event += value;
_dictionary[token] = value;
return token;
}
remove
{
// recall value and remove from dictionary
_otherClass.Event -= _dictionary[value];
_dictionary.Remove(value);
// remove it from the "fake" event
_changed.RemoveEventHandler(value);
}
}
private EventRegistrationTokenTable<EventHandler<Object>> _changed;
private Dictionary<EventRegistrationToken, EventHandler<Object>> _dictionary;
または、WinRT クラスから CLR イベントをサブスクライブし、単純に CLR イベントを WinRT サブスクライバーに転送する方が簡単な場合があります。あなたが尋ねたことから多かれ少なかれ流れを逆にします:
public WinRtObject()
{
_otherClass.Event += (sender, o) => OnChanged(o);
}
public event EventHandler<Object> Changed;
private void OnChanged(object e)
{
EventHandler<object> handler = Changed;
if (handler != null)
handler(this, e);
}