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 в ViewModel | DelegateOneWayToSourceBinder<T> |
| Конвертация типа при привязке | CasterBinder<TFrom, TTo> |
| Одноразовая инициализация | DelegateOneTimeBinder<T> |
См. также
- Value Binders — хранение привязанного значения
- Биндеры — обзор системы биндеров
- Обзор StarterKit