I tried to understand the question about data binding, but it turned out to be too complicated. I found that there are Bind / Unbind methods in VisualElement. Unfortunately, these methods work with SerializedObject and are not suitable for binding other data. I also found the IBindable interface, IBinding, and the BindProperty method, which also implements the binding. But SerializedProperty is an object derived from SerializedObject, which also does not suit me. What scares me most of all in such a matter is the binding for arrays, and the need to synchronize them later. Who, where and how carries out this binding a riddle for me. And I do not understand the boundaries of binding. What exactly should it be able to do within this system? I assume that this should give the opportunity to both read and assign data to the fields automatically. For example, if I have a Label and some text that I want to substitute there, then it will be replaced if the field value of the class with which I associated it changes. Or if I have an IntField, then it allows you to both read and write the value in the specified int field. Confirm or disprove this, please. Quite often, we are not dealing with any data set stored within a SerializedObject. Is there any way to bind data if I just store it in an instance of a class? I also looked at the examples provided by Unity, but it gave me a rather vague idea of how to use it in real tasks and in cases where we have third-party serialization.