Overriding c++ abstract class events in widget blueprints

Basically trying to follow this UMG Best Practices - Unreal Engine , but simulating using some made up data.
I created a c++ class, UOfferDataModelAsset, that inherits from DataAssets, and it has a couple fields.
I created an Actor whose Blueprint Class controls arrays of DataAssets and when they are refreshed. When they are refreshed, I call an Event Dispatcher, UpdatedArrays, to signal the arrays have been refreshed.
I created a c++ abstract base class UOfferShopWidgetBase, that inherits from UserWidget. It has a function GenerateOffer that takes a ref to a UOfferDataModelAsset.
I created a Widget Blueprint, OfferShopWidget, and reparented it to UOfferShopWidgetBase.
When trying to bind my GenerateOffer method to UpdatedArrays inside of OfferShopWidget, I get a compiler error that the selected function is not bindable. Then it guesses that its because its abstract.
Uh, yeah, thats the point.
How can I override GenerateOffer?

If i’m reading this properly, You are trying to bind to a function, when you should be binding to a DYNAMIC_MULTICAST_DELEGATE. A function is not bind-able in Blueprints.

Whoops, it looks like I miss typed a few things. My method GenerateOffer inside my UOfferShopWidgetBase class has UFUNCTION(BlueprintImplementableEvent) above it, so that its treated as an event in blueprints. I then try to bind GenerateOffer, now an event, to the EventDispatcher being called from my DataController Actor.
I got it to work by making a new custom event and binding it to the EventDispatcher, but the whole idea of using abstraction is that blueprints deriving from a base c++ class can override that base class’s methods.

A BlueprintImplementableEvent is not usable from BP like that, it needs to be BlueprintCallable aswell.

Thanks! That worked. Maybe unreal should update the best practices guide lol