diff --git a/src/Fabulous/Attributes.fs b/src/Fabulous/Attributes.fs index f7e84df03..a272fe763 100644 --- a/src/Fabulous/Attributes.fs +++ b/src/Fabulous/Attributes.fs @@ -355,3 +355,26 @@ module Attributes = |> AttributeDefinitionStore.registerScalar { Key = key; Name = name } + + let inline defineEventNoDispatch<'args> + name + ([] getEvent: obj -> IEvent, 'args>) + : SimpleScalarAttributeDefinition<'args -> unit> = + let key = + SimpleScalarAttributeDefinition.CreateAttributeData( + ScalarAttributeComparers.noCompare, + (fun _ (newValueOpt: ('args -> unit) voption) node -> + match node.TryGetHandler(name) with + | ValueNone -> () + | ValueSome handler -> handler.Dispose() + + match newValueOpt with + | ValueNone -> node.RemoveHandler(name) + | ValueSome(fn) -> + let event = getEvent node.Target + node.SetHandler(name, event.Subscribe(fun args -> fn args))) + ) + + |> AttributeDefinitionStore.registerScalar + + { Key = key; Name = name }