MvvmCross включает множество привязок целевых объектов из коробки, UISwitch является одной из них. Полный список см. В разделе « встроенные привязки » в документации MvvmCross.
Односторонняя привязка (ViewModel -> View)
По умолчанию вы можете создать привязку для присвоения значения свойству на ваше представление из вашей модели представления, это называется односторонней привязкой. Этот подход работает даже с настраиваемыми сторонними элементами управления, если типы совпадают.
Двусторонняя привязка ( ViewModel -> View && View -> ViewModel )
Чтобы выполнить двустороннюю привязку, MvvmCross нуждается в механизме представления для уведомления модели представления об изменении значения представления. Для этого MvvmCross использует привязки цели. См. Документацию MvvCross для создания настраиваемых целевых привязок.
Пример
См. Исходный код MvvmCross для MvxUISwitchOnTargetBinding.cs
, где показано, как они работают привязка для элемента управления UISwitch и состояния On.
public class MvxUISwitchOnTargetBinding : MvxTargetBinding<UISwitch, bool>
{
private IDisposable _subscription;
public MvxUISwitchOnTargetBinding(UISwitch target)
: base(target)
{
}
protected override void SetValue(bool value)
{
Target.SetState(value, true);
}
public override void SubscribeToEvents()
{
var uiSwitch = Target;
if (uiSwitch == null)
{
MvxBindingLog.Error( "Error - Switch is null in MvxUISwitchOnTargetBinding");
return;
}
_subscription = uiSwitch.WeakSubscribe(nameof(uiSwitch.ValueChanged), HandleValueChanged);
}
public override MvxBindingMode DefaultMode => MvxBindingMode.TwoWay;
protected override void Dispose(bool isDisposing)
{
base.Dispose(isDisposing);
if (!isDisposing) return;
_subscription?.Dispose();
_subscription = null;
}
private void HandleValueChanged(object sender, EventArgs e)
{
FireValueChanged(Target.On);
}
}
Примечание метод HandleValueChanged
, который вызывает метод FireValueChanged()
, это метод который передает значение, которое вы хотите отправить обратно в вашу связанную модель представления.
Затем вам нужно будет зарегистрировать свои настраиваемые целевые привязки в своем классе Setup.cs
, переопределив FillTargetFactories
.