Перейти к основному содержимому

Delegate Binders

Делегат-биндеры для создания привязок из кода без MonoBehaviour.


Обзор

Delegate-биндеры принимают делегаты (Action, Func) и создают привязку программно. Используйте их когда нужен кастомный биндер без создания отдельного класса.


DelegateOneWayBinder<T>

Простейший биндер — принимает Action<T> для установки значения:

var binder = new DelegateOneWayBinder<string>(value =>
{
Debug.Log($"Name changed: {value}");
});

view.BindCustomBinder("Name", binder);

С таргетом: DelegateOneWayBinder<TTarget, T>

var label = GetComponent<TMP_Text>();
var binder = new DelegateOneWayBinder<TMP_Text, string>(
label,
(target, value) => target.text = value
);

Режимы: OneWay, OneTime (TwoWay запрещён).


DelegateTwoWayBinder<T>

Двусторонний биндер — принимает Action<T> для установки и возвращает изменения через ValueChanged:

var binder = new DelegateTwoWayBinder<string>(
subscribe: callback =>
{
// Подписаться на изменения UI → вызвать callback(newValue)
inputField.onEndEdit.AddListener(text => callback(text));
},
setValue: value =>
{
inputField.text = value;
}
);

Дополнительные параметры:

  • getValueOnBound — вызывается при привязке, возвращает начальное значение
  • getValueOnUnbinding — вызывается при отвязке

Режим: TwoWay.


DelegateOneWayToSourceBinder<T>

Обратный биндер — отправляет значения из View в ViewModel:

var binder = new DelegateOneWayToSourceBinder<float>(
subscribe: callback =>
{
slider.onValueChanged.AddListener(v => callback(v));
},
getValueOnBound: () => slider.value // начальное значение
);

Режим: OneWayToSource.


CasterBinder<TFrom, TTo>

Биндер с конвертацией типа через IConverter<TFrom, TTo>:

var binder = new CasterBinder<int, string>(
setValue: text => label.text = text,
converter: new IntToStringConverter()
);

Режимы: OneWay, OneTime.


DelegateOneTimeBinder<T>

Биндер, получающий значение один раз:

var binder = new DelegateOneTimeBinder<Config>(config =>
{
ApplyConfig(config);
});

Режим: OneTime.


Когда использовать

СценарийБиндер
Простая реакция на изменениеDelegateOneWayBinder<T>
Двусторонняя связь с кастомным компонентомDelegateTwoWayBinder<T>
Передача данных из UI в ViewModelDelegateOneWayToSourceBinder<T>
Конвертация типа при привязкеCasterBinder<TFrom, TTo>
Одноразовая инициализацияDelegateOneTimeBinder<T>

См. также