View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0005278 | NoesisGUI | Unreal | public | 2026-10-25 01:40 | 2026-10-26 11:18 |
| Reporter | njahs | Assigned To | hcpizzi | ||
| Priority | normal | Severity | minor | ||
| Status | assigned | Resolution | open | ||
| Product Version | 4.0 | ||||
| Target Version | 4.0.2 | ||||
| Summary | 0005278: Field with plain native getter does not update properly | ||||
| Description | With the UE MVVM pattern Cause: the getter pass of Background:
Projects use this pattern because the property is the single source of truth for Blueprint and for MVVM field notifications, and the getter gives C++ and Noesis a stable name ( Repro:
Binding in XAML (DataContext is a wrapped UExampleViewModel): Steps: create the objects as above, change the value once, read the target text. | ||||
| Platform | Windows | ||||
|
Proposed fix: In the getter pass, when the getter function has no field id, look for the backing property and register its field id under the same binding name. In editor builds the property whose Getter metadata names the function is used. In all builds the property called Foo or bFoo is used. proposed-fix.patch (1,371 bytes)
--- a/Plugins/NoesisGUI/Source/NoesisRuntime/Private/NoesisTypeClass.cpp
+++ b/Plugins/NoesisGUI/Source/NoesisRuntime/Private/NoesisTypeClass.cpp
@@ -3141,6 +3141,42 @@
{
TypeClass->AddFieldNotification(FieldId, FName(PropertyId.Str()));
}
+ else
+ {
+ FProperty* BackingProperty = nullptr;
+ for (TFieldIterator<FProperty> BackingIt(Class, EFieldIteratorFlags::ExcludeSuper); BackingIt; ++BackingIt)
+ {
+ FProperty* Candidate = *BackingIt;
+#if WITH_EDITORONLY_DATA
+ const FString* GetterMeta = Candidate->FindMetaData(TEXT("Getter"));
+ if (GetterMeta != nullptr && *GetterMeta == FunctionName)
+ {
+ BackingProperty = Candidate;
+ break;
+ }
+#endif
+ const FString CandidateName = Candidate->GetName();
+ if (CandidateName == FString(PropertyId.Str()) || CandidateName == FString(TEXT("b")) + FString(PropertyId.Str()))
+ {
+ BackingProperty = Candidate;
+ }
+ }
+ if (BackingProperty != nullptr)
+ {
+ auto BackingFieldId = Descriptor.GetField(Class, BackingProperty->GetFName());
+ if (BackingFieldId.IsValid())
+ {
+ TypeClass->AddFieldNotification(BackingFieldId, FName(PropertyId.Str()));
+ }
+ }
+ }
}
}
} |
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-10-25 01:40 | njahs | New Issue | |
| 2026-10-25 01:41 | njahs | Description Updated | |
| 2026-10-25 01:42 | njahs | Note Added: 0012789 | |
| 2026-10-25 01:42 | njahs | File Added: proposed-fix.patch | |
| 2026-10-26 11:16 | sfernandez | Assigned To | => hcpizzi |
| 2026-10-26 11:16 | sfernandez | Status | new => assigned |
| 2026-10-26 11:16 | sfernandez | Target Version | => 4.0.2 |
| 2026-10-26 11:18 | sfernandez | Relationship added | related to 0005279 |