Observable.FromEventPattern<TSender, TEventArgs>(object target, string eventName) ignores TSender
- 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.