# CustomBinding

> Base class for general purpose binding extensibility.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.UIElements](/engine/6000.0/script-reference/unityengine/uielements.md)
* **Assembly:** UnityEngine.UIElementsModule
* **Inherits from:** [Binding](/engine/6000.0/script-reference/unityengine/uielements/binding.md)

```csharp
[UxmlObject]
public abstract class CustomBinding : Binding
```

## Remarks

The following example creates a custom binding that displays the current time. You can bind it to the text field of a Label to create a clock.

## Examples

```csharp
using System;
using Unity.Properties;
using UnityEngine.UIElements;

[UxmlObject]
public partial class CurrentTimeBinding : CustomBinding
{
    [UxmlAttribute]
    public string timeFormat = "HH:mm:ss";

    public CurrentTimeBinding()
    {
        updateTrigger = BindingUpdateTrigger.EveryUpdate;
    }

    protected override BindingResult Update(in BindingContext context)
    {
        var timeNow = DateTime.Now.ToString(timeFormat);
        var element = context.targetElement;
        if (ConverterGroups.TrySetValueGlobal(ref element, context.bindingId, timeNow, out var errorCode))
            return new BindingResult(BindingStatus.Success);

        // Error handling
        var bindingTypename = TypeUtility.GetTypeDisplayName(typeof(CurrentTimeBinding));
        var bindingId = $"{TypeUtility.GetTypeDisplayName(element.GetType())}.{context.bindingId}";

        return errorCode switch
        {
            VisitReturnCode.InvalidPath => new BindingResult(BindingStatus.Failure, $"{bindingTypename}: Binding id `{bindingId}` is either invalid or contains a `null` value."),
            VisitReturnCode.InvalidCast => new BindingResult(BindingStatus.Failure, $"{bindingTypename}: Invalid conversion from `string` for binding id `{bindingId}`"),
            VisitReturnCode.AccessViolation => new BindingResult(BindingStatus.Failure, $"{bindingTypename}: Trying set value for binding id `{bindingId}`, but it is read-only."),
            _ => throw new ArgumentOutOfRangeException()
        };
    }
}
```

## Constructors

| Constructor                                                                                     | Description                                                                                                                      |
| ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| [CustomBinding()](/engine/6000.0/script-reference/unityengine/uielements/custombinding/ctor.md) | Initializes and returns an instance of [CustomBinding](/engine/6000.0/script-reference/unityengine/uielements/custombinding.md). |

## Inheritance

**Inherited Members:**

* [Binding.SetGlobalLogLevel(BindingLogLevel)](/engine/6000.0/script-reference/unityengine/uielements/binding/setgloballoglevel.md)
* [Binding.SetPanelLogLevel(IPanel, BindingLogLevel)](/engine/6000.0/script-reference/unityengine/uielements/binding/setpanelloglevel.md)
* [Binding.ResetPanelLogLevel(IPanel)](/engine/6000.0/script-reference/unityengine/uielements/binding/resetpanelloglevel.md)
* [Binding.MarkDirty()](/engine/6000.0/script-reference/unityengine/uielements/binding/markdirty.md)
* [Binding.isDirty](/engine/6000.0/script-reference/unityengine/uielements/binding/isdirty.md)
* [Binding.updateTrigger](/engine/6000.0/script-reference/unityengine/uielements/binding/updatetrigger.md)
