I know this was posted a while ago, but in case anyone else ends up here, I just managed to get this working by overloading these three methods, and performing the update before calling into Super:
#if WITH_EDITOR
virtual void PostEditChangeProperty(struct FPropertyChangedEvent& InChangeEvent) override;
virtual void PostCDOCompiled(const FPostCDOCompiledContext& Context) override;
virtual void PostTransacted(const FTransactionObjectEvent& TransactionEvent) override;
#endif // WITH_EDITOR
EDIT: Further Follow up:
Some more testing, and it appears to work with just overloading this method:
virtual void PostEditChangeProperty(struct FPropertyChangedEvent& InChangeEvent) override;
However, I ran into issues, where in my case I was assigning a dynamic material instance to the Class Default Object’s static mesh whenever I updated the Blueprint Default. This would cause a Save error to the instances in the editor, (something along the lines of referencing an external private property instance).
I added the following flag check to make sure I wasn’t doing it on the CDO. (Checking owner as this was a actor component).
if (GetOwner() && GetOwner()->HasAnyFlags(RF_ClassDefaultObject)) return;
That seems to be stable so far…