|
// In Model class
public bool IsClosed
{
get { return this.isClosed; }
set { this.isClosed = value; RaisePropertyChanged("IsClosed"); }
}
// In XAML
<sfgrid:SfDataGrid.Columns>
<sfgrid:GridTextColumn MappingName="Customer" HeaderText="Customer"/>
<sfgrid:GridTextColumn MappingName="ShipCountry" HeaderText="Ship Country"/>
<sfgrid:GridSwitchColumn MappingName="IsClosed"/>
<sfgrid:GridTextColumn MappingName="ShipCity" HeaderText="Ship City"/>
</sfgrid:SfDataGrid.Columns> |
|
grid.CellRenderers.Remove("Switch");
grid.CellRenderers.Add("Switch", new GridSwitchRendererExt());
public class GridSwitchRendererExt : GridCellSwitchRenderer
{
public override void OnInitializeDisplayView(DataColumnBase dataColumn, SfSwitchControl view)
{
base.OnInitializeDisplayView(dataColumn, view);
view.Toggled += (sender, e) =>
{
if (e.Value)
{
dataColumn.Renderer.DataGrid.SelectedItems.Add(dataColumn.RowData);
}
else
{
dataColumn.Renderer.DataGrid.SelectedItems.Remove(dataColumn.RowData);
}
dataColumn.Renderer.DataGrid.UpdateDataRow(dataColumn.RowIndex);
};
}
} |
|
<sfgrid:GridTemplateColumn MappingName="Order"> // Here Order is not in the column collection. You can give any name here as your wish.
<sfgrid:GridTemplateColumn.CellTemplate>
<DataTemplate>
<Switch IsToggled="False"></Switch> // By default set IsToggle as "False" since you don't want to bind any Model property here.
</DataTemplate>
</sfgrid:GridTemplateColumn.CellTemplate>
</sfgrid:GridTemplateColumn>
// In Code-behind
grid.CellRenderers.Remove("Template");
grid.CellRenderers.Add("Template", new GridTemplateRendererExt());
public class GridTemplateRendererExt : GridCellTemplateRenderer
{
public override void OnInitializeDisplayView(DataColumnBase dataColumn, View view)
{
base.OnInitializeDisplayView(dataColumn, view);
var gridCell = (dataColumn as IElement).Element as GridCell;
var switchCell = gridCell != null ? gridCell.Content as Switch : null;
if(switchCell != null)
{
switchCell.IsToggled = (dataColumn.RowData as OrderInfo).IsClosed;
switchCell.Toggled += (sender, e) =>
{
if (e.Value)
{
(dataColumn.RowData as OrderInfo).IsClosed = true;
dataColumn.Renderer.DataGrid.SelectedItems.Add(dataColumn.RowData);
}
else
{
(dataColumn.RowData as OrderInfo).IsClosed = false;
dataColumn.Renderer.DataGrid.SelectedItems.Remove(dataColumn.RowData);
}
dataColumn.Renderer.DataGrid.UpdateDataRow(dataColumn.RowIndex);
};
}
}
protected override void OnUpdateCellValue(DataColumnBase dataColumn)
{
base.OnUpdateCellValue(dataColumn);
// Update the row since to maintain the switch in the correct toggled state
dataColumn.Renderer.DataGrid.UpdateDataRow(dataColumn.RowIndex);
}
} |