80 lines
2.6 KiB
C#
80 lines
2.6 KiB
C#
|
using System;
|
|||
|
using System.ComponentModel;
|
|||
|
using Xamarin.Forms;
|
|||
|
|
|||
|
namespace Ooui.Forms.Cells
|
|||
|
{
|
|||
|
public class SwitchCellRenderer : CellRenderer
|
|||
|
{
|
|||
|
private static Cell _cell;
|
|||
|
|
|||
|
public override CellView GetCell(Cell item, CellView reusableView, List listView)
|
|||
|
{
|
|||
|
var nativeSwitchCell = reusableView as CellView;
|
|||
|
Input oouiSwitch = null;
|
|||
|
|
|||
|
if (nativeSwitchCell == null)
|
|||
|
nativeSwitchCell = new CellView();
|
|||
|
else
|
|||
|
{
|
|||
|
oouiSwitch = nativeSwitchCell.CustomView.FirstChild as Input;
|
|||
|
|
|||
|
if (oouiSwitch != null)
|
|||
|
{
|
|||
|
nativeSwitchCell.CustomView.RemoveChild(oouiSwitch);
|
|||
|
oouiSwitch.Click -= OnSwitchClick;
|
|||
|
}
|
|||
|
nativeSwitchCell.Cell.PropertyChanged -= OnCellPropertyChanged;
|
|||
|
}
|
|||
|
|
|||
|
SetRealCell(item, nativeSwitchCell);
|
|||
|
|
|||
|
if (oouiSwitch == null)
|
|||
|
{
|
|||
|
oouiSwitch = new Input(InputType.Checkbox);
|
|||
|
oouiSwitch.SetAttribute("data-toggle", "toggle");
|
|||
|
}
|
|||
|
|
|||
|
var switchCell = (SwitchCell)item;
|
|||
|
|
|||
|
nativeSwitchCell.Cell = item;
|
|||
|
nativeSwitchCell.SecondCol.Style.Width = "25%";
|
|||
|
_cell = nativeSwitchCell.Cell;
|
|||
|
|
|||
|
nativeSwitchCell.Cell.PropertyChanged += OnCellPropertyChanged;
|
|||
|
nativeSwitchCell.CustomView.AppendChild(oouiSwitch);
|
|||
|
nativeSwitchCell.TextLabel.Text = switchCell.Text ?? string.Empty;
|
|||
|
|
|||
|
oouiSwitch.IsChecked = switchCell.On;
|
|||
|
oouiSwitch.Click += OnSwitchClick;
|
|||
|
|
|||
|
WireUpForceUpdateSizeRequested(item, nativeSwitchCell);
|
|||
|
|
|||
|
UpdateBackground(nativeSwitchCell, item);
|
|||
|
|
|||
|
return nativeSwitchCell;
|
|||
|
}
|
|||
|
|
|||
|
private void OnCellPropertyChanged(object sender, PropertyChangedEventArgs e)
|
|||
|
{
|
|||
|
var switchCell = (SwitchCell)sender;
|
|||
|
var nativeSwitchCell = (CellView)GetRealCell(switchCell);
|
|||
|
|
|||
|
if (e.PropertyName == SwitchCell.OnProperty.PropertyName)
|
|||
|
((Input)nativeSwitchCell.CustomView.FirstChild).IsChecked = switchCell.On;
|
|||
|
else if (e.PropertyName == SwitchCell.TextProperty.PropertyName)
|
|||
|
nativeSwitchCell.TextLabel.Text = switchCell.Text ?? string.Empty;
|
|||
|
}
|
|||
|
|
|||
|
private void OnSwitchClick(object sender, EventArgs eventArgs)
|
|||
|
{
|
|||
|
var switchInput = (Input)sender;
|
|||
|
|
|||
|
CellView realCell = GetRealCell(_cell);
|
|||
|
|
|||
|
if (realCell != null)
|
|||
|
((SwitchCell)realCell.Cell).On = switchInput.IsChecked;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|