dotnet / dotnet/reactive

Observable.FromEventPattern<TSender, TEventArgs>(object target, string eventName) ignores TSender

Open
#1,239 6 comments 0 reactions 0 assignees View on GitHub
[area] Rx
Dominant language
C#
Stars
7.2k
Forks
798
PR merge metrics
No merged PRs in 30d

Description

When `Observable.FromEventPattern(object target, string eventName)` is invoked with a `target` of type `System.Windows.Data.ListCollectionView` and `TSender` `System.Collections.Specialized.INotifyCollectionChanged` this exception will be thrown:

```
Could not find event 'CollectionChanged' on object of type 'System.Windows.Data.ListCollectionView'.

at System.Reactive.ReflectionUtils.GetEventMethods[TSender,TEventArgs](Type targetType, Object target, String eventName, MethodInfo& addMethod, MethodInfo& removeMethod, Type& delegateType, Boolean& isWinRT)   at System.Reactive.Linq.QueryLanguage.FromEventPattern_[TSender,TEventArgs,TResult](Type targetType, Object target, String eventName, Func`3 getResult, IScheduler scheduler)   at System.Reactive.Linq.QueryLanguage.FromEventPattern_[TSender,TEventArgs](Object target, String eventName, IScheduler scheduler)   at System.Reactive.Linq.QueryLanguage.FromEventPattern[TSender,TEventArgs](Object target, String eventName)   at System.Reactive.Linq.Observable.FromEventPattern[TSender,TEventArgs](Object target, String eventName)   at UserQuery.WatchCollection(INotifyCollectionChanged inc)   at UserQuery.Main()   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)   at System.Threading.ThreadHelper.ThreadStart()
```

Could it be that the problem is [here](https://github.com/dotnet/reactive/blob/master/Rx.NET/Source/src/System.Reactive/Linq/QueryLanguage.Events.cs#L191)? and instead of:

```
private static IObservable> FromEventPattern_(object target, string eventName, IScheduler scheduler)
{
return FromEventPattern_>(target.GetType(), target, eventName, (sender, args) => new EventPattern(sender, args), scheduler);
}
```

it should be:

```
private static IObservable> FromEventPattern_(object target, string eventName, IScheduler scheduler)
{
return FromEventPattern_>(typeof(TSender), target, eventName, (sender, args) => new EventPattern(sender, args), scheduler);
}
```

For reference, see [this stack**overflow** question](https://stackoverflow.com/a/62604506/402366).

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.