I just faced a similar problem and solved it using a little wrapper class:
UCLASS()
class ULambdaWrapper : public UObject
{
GENERATED_BODY()
public:
TFunction<void()> CallFn;
UFUNCTION()
void Dispatch() { CallFn(); }
};
That way you can “bind” a lambda like this:
auto btnWrap = NewObject<ULambdaWrapper>();
btnWrap->CallFn = [this]{//do lambda stuff};
someButton->OnClicked.AddDynamic(btnWrap, &ULambdaWrapper::Dispatch);