SetOnPropertyValueChanged Not triggering when values in array changed

I’m trying to do a bit of details panel customisation for a custom actor class and I’d like to refresh said details panel whenever a property, in this case an array called IncomingRoadPoints, is changed. This is the code I’m using:

RoadNodeArrayPtr = LayoutBuilder->GetProperty(GET_MEMBER_NAME_CHECKED(AIntersectionController, IncomingRoadPoints));

FSimpleDelegate OnNodeArrayChanged = FSimpleDelegate::CreateSP(this, &FIntersectionControllerDetails::UpdateRoadNodeInfo);

RoadNodeArrayPtr->SetOnPropertyValueChanged(OnNodeArrayChanged);

This is triggered just fine whenever the length of the array changes, or if I get a different property (Like a bool or something), but is not triggered when I change one of the values in the array. From stepping through the source code, it looks like the delegate doesn’t exist when it tries to broadcast the change event, but I can’t figure out why.

Any ideas?

No-one has any experience here?

Well, how about this dirty thing?

TSharedPtr<IPropertyHandleArray> Elements = RoadNodeArrayPtr->AsArray();
uint32 NumElements;
Elements->GetNumElements(NumElements);
for (uint32 ElemIndex = 0; ElemIndex < NumElements; ++ElemIndex)
{
    TSharedRef<IPropertyHandle> ElemHandle = Elements->GetElement((int32)ElemIndex);
    ElemHandle->SetOnPropertyValueChanged(OnNodeArrayChanged)
}

Thanks for that, managed to get it working. I did need to put in a workaround to make sure I wasn’t assigning the same delegate to the same property multiple times, since that throws an exception. It would be nice if there was a way to remove or at least check for existing delegate bindings.

As it is I just have an array of int32’s that I store the indexes of bound properties in so I only bind new properties.