### Class

# GObject Binding

since: 2.26

#### Description

    final class GObject.Binding : GObject.Object
    {
      /* No available fields */
    }

`GObject` instance (or source) and another property on another `GObject` instance (or target).

Whenever the source property changes, the same value is applied to the target property; for instance, the following binding:

      g_object_bind_property (object1, "property-a",
                              object2, "property-b",
                              G_BINDING_DEFAULT);

will cause the property named “property-b” of `object2` to be updated every time `g_object_set()` or the specific accessor changes the value of the property “property-a” of `object1`.

It is possible to create a bidirectional binding between two properties of two `GObject` instances, so that if either property changes, the other is updated as well, for instance:

      g_object_bind_property (object1, "property-a",
                              object2, "property-b",
                              G_BINDING_BIDIRECTIONAL);

will keep the two properties in sync.

It is also possible to set a custom transformation function (in both directions, in case of a bidirectional binding) to apply a custom transformation from the source value to the target value before applying it; for instance, the following binding:

      g_object_bind_property_full (adjustment1, "value",
                                   adjustment2, "value",
                                   G_BINDING_BIDIRECTIONAL,
                                   celsius_to_fahrenheit,
                                   fahrenheit_to_celsius,
                                   NULL, NULL);

will keep the “value” property of the two adjustments in sync; the `celsius_to_fahrenheit` function will be called whenever the “value” property of `adjustment1` changes and will transform the current value of the property before applying it to the “value” property of `adjustment2`.

Vice versa, the `fahrenheit_to_celsius` function will be called whenever the “value” property of `adjustment2` changes, and will transform the current value of the property before applying it to the “value” property of `adjustment1`.

Note that `GBinding` does not resolve cycles by itself; a cycle like

      object1:propertyA -> object2:propertyB
      object2:propertyB -> object3:propertyC
      object3:propertyC -> object1:propertyA

might lead to an infinite loop. The loop, in this particular case, can be avoided if the objects emit the `GObject::notify` signal only if the value has effectively been changed. A binding is implemented using the `GObject::notify` signal, so it is susceptible to all the various ways of blocking a signal emission, like `g_signal_stop_emission()` or `g_signal_handler_block()`.

A binding will be severed, and the resources it allocates freed, whenever either one of the `GObject` instances it refers to are finalized, or when the `GBinding` instance loses its last reference.

Bindings for languages with garbage collection can use `g_binding_unbind()` to explicitly release a binding between the source and target properties, instead of relying on the last reference on the binding, source, and target instances to drop.

Available since: 2.26

#### Ancestors

- GObject

#### Instance methods

###### g_binding_dup_source

Retrieves the `GObject` instance used as the source of the binding.

since: 2.68

###### g_binding_dup_target

Retrieves the `GObject` instance used as the target of the binding.

since: 2.68

###### g_binding_get_flags

Retrieves the flags passed when constructing the `GBinding`.

since: 2.26

###### g_binding_get_source

Retrieves the `GObject` instance used as the source of the binding.

deprecated: 2.68 since: 2.26

###### g_binding_get_source_property

Retrieves the name of the property of `GBinding:source` used as the source of the binding.

since: 2.26

###### g_binding_get_target

Retrieves the `GObject` instance used as the target of the binding.

deprecated: 2.68 since: 2.26

###### g_binding_get_target_property

Retrieves the name of the property of `GBinding:target` used as the target of the binding.

since: 2.26

###### g_binding_unbind

Explicitly releases the binding between the source and the target property expressed by `binding`.

since: 2.38

##### Methods inherited from GObject (43)

Please see GObject for a full list of methods.

#### Properties

###### GObject.Binding:flags

Flags to be used to control the `GBinding`.

since: 2.26

###### GObject.Binding:source

The `GObject` that should be used as the source of the binding.

since: 2.26

###### GObject.Binding:source-property

The name of the property of `GBinding:source` that should be used as the source of the binding.

since: 2.26

###### GObject.Binding:target

The `GObject` that should be used as the target of the binding.

since: 2.26

###### GObject.Binding:target-property

The name of the property of `GBinding:target` that should be used as the target of the binding.

since: 2.26

#### Signals

##### Signals inherited from GObject (1)

###### GObject::notify

The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.

since: 2.0