Skip to content

Events

Roslyn source generators turn classic CLR events (and optional UI routed events) into reactive streams.

Packages

PackageStream type
Observables.Events.R3R3 Observable<T>
Observables.Events.ReactiveIObservable<T>

Add the matching runtime: R3 or System.Reactive.

Classic events

csharp
using Observables.Events.R3;
using R3;

public class ClickSource
{
    public event Action? Click;
}

var stream = new ClickSource().Events().Click;
  • Events()ActionObservable<Unit>; Action<T> / EventHandler<T>Observable<T> (or tuple for (object, T) handlers).
  • EventHandlers() — uses EventObservable.EventHandler for EventHandler / (object, T) shapes.

Routed events (Avalonia / WPF)

Import buildTransitive/observables.events.props from the package (automatic with the meta-package). Enable generation:

xml
<PropertyGroup>
  <ObservableRoutedEvents>true</ObservableRoutedEvents>
</PropertyGroup>

WPF also requires <UseWPF>true</UseWPF>.

API surface (R3 namespace Observables.Events.R3):

  • RoutedEvents() / RoutedEventHandlers() on controls such as Button
  • AttachedRoutedEvent / AttachedRoutedEventHandler on a parent (Panel, etc.)

See Observables.Samples.Events.Routed for an Avalonia desktop example (local run; not executed in Samples CI).

Diagnostics

See Diagnostics.

Samples

Released under the MIT License.