Access UDT root custom property inside a Tag Expression

The use of tag() is not discouraged in expression tags. There's no alternative, as there's no such thing as indirect binding otherwise.

The tag() function has pathological startup behavior that is especially troublesome in UI bindings, plus it has to completely re-execute its string expression on every tag update, which imposes extra CPU load compared to indirect bindings.

Finally, when you have multiple tag() expressions or tag bindings contributing to an expression, they are all independently asynchronous, and will trigger expression re-execution independently. The batching time argument to my tags() expression function specifically addresses this troublesome behavior.