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

Value Binders

Обёртки для хранения привязанного значения в коде (без MonoBehaviour).


Обзор

Value-биндеры — это не-MonoBehaviour классы для получения значений из ViewModel в коде. Полезны когда нужно прочитать значение ViewModel программно, без UI.


Типы

КлассРежимОписание
ValueOneWayBinder<T>OneWay / OneTimeХранит значение, event Changed
ValueTwoWayBinder<T>TwoWayДвусторонняя — можно менять из кода
ValueOneTimeBinder<T>OneTimeRead-only после первой установки
ValueOneWayToSourceBinder<T>OneWayToSourcePush из кода в ViewModel

ValueOneWayBinder<T>

var healthValue = new ValueOneWayBinder<int>();

// Привязка к ViewModel
view.BindCustomBinder("Health", healthValue);

// Чтение значения
int current = healthValue.Value;

// Подписка на изменения
healthValue.Changed += newValue =>
{
Debug.Log($"Health changed: {newValue}");
};

// Неявное приведение
int hp = healthValue; // implicit cast to T?

ValueTwoWayBinder<T>

var nameValue = new ValueTwoWayBinder<string>();

// Привязка...

// Чтение
string name = nameValue.Value;

// Запись — уведомляет ViewModel
nameValue.Value = "New Name";

При записи Value вызывается ValueChanged, который передаёт изменение обратно в ViewModel.


Пример: использование в кастомном компоненте

public class CustomComponent : MonoBehaviour
{
private ValueOneWayBinder<bool> _isActive = new();

public void Bind(IViewModel viewModel)
{
var result = viewModel.FindBindableMember(
new FindBindableMemberParameters("IsActive"));

if (result.IsFound)
_isActive.Bind(result.Adder);
}

private void Update()
{
// Используем значение из ViewModel
if (_isActive.Value)
DoSomething();
}
}

См. также