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

Switcher Binders

Паттерн Switcher: bool → выбор между двумя предустановленными значениями.


Обзор

Switcher-биндер принимает bool и возвращает одно из двух значений:

  • true_trueValue
  • false_falseValue

Это альтернатива конвертерам для простых случаев "если/иначе".


SwitcherBinder<T>

Базовый класс (не MonoBehaviour):

public abstract class SwitcherBinder<T> : Binder, IBinder<bool>
{
// Сериализуются в Inspector:
protected T _trueValue;
protected T _falseValue;

public void SetValue(bool value)
{
SetValue(value ? _trueValue : _falseValue);
}

protected abstract void SetValue(T value);
}

Режимы: OneWay, OneTime. TwoWay и OneWayToSource не поддерживаются.


Готовые Switcher-биндеры

Почти каждый стандартный биндер имеет Switcher-вариант:

Switcher-биндерВыбирает междуПример
TextSwitcherBinderдвумя строками"Активен" / "Неактивен"
TextFontSwitcherBinderдвумя шрифтамиBold / Regular
TextFontSizeSwitcherBinderдвумя размерами24 / 16
TextAlignmentSwitcherBinderдвумя выравниваниямиCenter / Left
ImageSpriteSwitcherBinderдвумя спрайтамиCheckOn / CheckOff
ImageFillSwitcherBinderдвумя fillAmount1.0 / 0.0
SliderMinMaxSwitcherBinderдвумя min/max(0,100) / (0,10)
GraphicColorSwitcherBinderдвумя цветамиGreen / Red
CanvasGroupAlphaSwitcherBinderдвумя alpha1.0 / 0.3
RendererMaterialsColorSwitcherBinderдвумя цветамиLit / Dark
SelectableColorBlockSwitcherBinderдвумя ColorBlockNormal / Disabled

SwitcherMonoBinder

MonoBehaviour-вариант для использования в Inspector:

// Три generic-перегрузки:
SwitcherMonoBinder<T> // без конвертера
SwitcherMonoBinder<T, TTarget> // с целевым компонентом
SwitcherMonoBinder<T, TTarget, TConv> // с конвертером

Пример использования

ViewModel

[ViewModel]
public partial class TaskViewModel
{
[OneWayBind] private bool _isCompleted;
}

В Inspector

  1. Добавьте TextSwitcherBinder на объект с TextMeshPro
  2. Установите:
    • True Value = "Выполнено"
    • False Value = "В процессе"
  3. Привяжите к IsCompleted

Результат: текст автоматически переключается при изменении IsCompleted.

Цвета статуса

  1. Добавьте GraphicColorSwitcherBinder
  2. True Value = зелёный
  3. False Value = красный

Когда использовать Switcher vs Конвертер

SwitcherКонвертер
Два фиксированных значенияПроизвольное преобразование
Настройка в InspectorЛогика в коде
Только bool входЛюбой тип входа
Быстрая настройкаПереиспользуемая логика

См. также