using System; using System.ComponentModel; using Ooui.Forms.Extensions; using Ooui.Forms.Renderers; using Xamarin.Forms; namespace Ooui.Forms.Cells { public class SwitchCellElement : CellElement { public Label TextLabel { get; } = new Label (); public SwitchRenderer.SwitchElement Switch { get; } = new SwitchRenderer.SwitchElement (); public SwitchCellElement () { AppendChild (TextLabel); AppendChild (Switch); Switch.Style.Display = "inline-block"; Switch.Change += Switch_Change; } protected override void BindCell () { Cell.PropertyChanged += Cell_PropertyChanged; if (Cell is SwitchCell cell) { UpdateText (cell); UpdateOn (cell); } base.BindCell (); } protected override void UnbindCell () { Cell.PropertyChanged -= Cell_PropertyChanged; base.UnbindCell (); } void Cell_PropertyChanged (object sender, PropertyChangedEventArgs e) { var cell = (SwitchCell)sender; if (e.PropertyName == SwitchCell.TextProperty.PropertyName) UpdateText (cell); else if (e.PropertyName == SwitchCell.OnProperty.PropertyName) UpdateOn (cell); } void UpdateText (SwitchCell cell) { TextLabel.Text = cell.Text ?? string.Empty; } void UpdateOn (SwitchCell cell) { Switch.IsChecked = cell.On; } void Switch_Change (object sender, EventArgs e) { if (Cell is SwitchCell cell) cell.On = Switch.IsChecked; } } }