Description

Any UPROPERTY TArray added to UMaterialEditorInstanceConstant will not cause UI updates when elements are added or removed.

This is caused by the custom validator created in FMaterialInstanceEditor::CreateInternalWidgets():

void FMaterialInstanceEditor::CreateInternalWidgets()

{     ...     auto ValidationLambda = ([](const FRootPropertyNodeList& PropertyNodeList)     \{ return true; }

    );
    MaterialInstanceDetails->SetCustomValidatePropertyNodesFunction(FOnValidateDetailsViewPropertyNodes::CreateLambda(MoveTemp(ValidationLambda)));
    ...
}

When this validator is present, the default validation does not run. The default validator is responsible for checking for changes to array length, and marking the UI for refresh.

This validation can be found in "SDetailsViewBase::Tick(...)", with the logic surrounding the variable "bUpdateFilteredDetails".

Steps to Reproduce

1. Download the attached test project
2. In MaterialEditorInstanceConstant.h, add the following code to UMaterialEditorInstanceConstant, right after GENERATE_UCLASS_BODY():

UPROPERTY(EditAnywhere, Category = MaterialEditorInstanceConstant)
TArray <float> TestArray;

3. Compile and open the test project
4. Open the Material Instance "/Game/MI_Instance"
5. Observe the value "Material Editor Instance Constant->Test Array" in the Details Pannel
6. Click the "[Image Removed]" button to add an element
7. Observe the UI does not update to show the element, or a dropdown arrow.
8. Toggle any other dropdown, such as "General"
9. Observe the UI for "Test Array" updates.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-296317 in the post.

0
Login to Vote

Unresolved
CreatedJun 13, 2025
UpdatedJun 13, 2025
View Jira Issue