public override void OnUpdateTemplateBinding(DataColumnBase dataColumn, ContentControl uiElement, object dataContext)
        {
            uiElement.ClearValue(ContentControl.ContentProperty);
            var dataContextHelper = new DataContextHelper {
                Record = dataContext
            };

            dataContextHelper.SetValueBinding(dataColumn.GridColumn.DisplayBinding, dataContext);
            uiElement.Content = dataContextHelper;
        }
        /// <summary>
        /// Called when [initialize edit element].
        /// </summary>
        /// <param name="dataColumn">DataColumn Which holds GridColumn, RowColumnIndex and GridCell </param>
        /// RowColumnIndex - RowColumnIndex for the Renderer Element
        /// <param name="uiElement">Corresponding Renderer Element</param>
        /// GridColumn - Column which is providing the information for Binding
        /// <param name="dataContext">The data context.</param>
        public override void OnInitializeEditElement(DataColumnBase dataColumn, ContentControl uiElement, object dataContext)
        {
            base.OnInitializeEditElement(dataColumn, uiElement, dataContext);
            uiElement.ClearValue(ContentControl.ContentProperty);
            var dataContextHelper = new DataContextHelper {
                Record = dataContext
            };

            dataContextHelper.SetValueBinding(dataColumn.GridColumn.ValueBinding, dataContext);
            uiElement.Content = dataContextHelper;
        }
        /// <summary>
        /// Initializes the cell style.
        /// </summary>
        /// <param name="dataColumn">DataColumn Which holds GridColumn, RowColumnIndex and GridCell </param>
        /// RowColumnIndex - RowColumnIndex for the Renderer Element
        /// GridColumn - Column which is providing the information for Binding
        /// <param name="record">The record.</param>
        protected override void InitializeCellStyle(DataColumnBase dataColumn, object record)
        {
            base.InitializeCellStyle(dataColumn, record);
            var uiElement  = (dataColumn.ColumnElement as GridCell).Content as ContentControl;
            var gridColumn = dataColumn.GridColumn as GridTemplateColumn;

            if (uiElement != null && gridColumn != null)
            {
                uiElement.ClearValue(ContentControl.ContentProperty);
                var dataContextHelper = new DataContextHelper {
                    Record = record
                };
                dataContextHelper.SetValueBinding(gridColumn.ValueBinding, record);
                uiElement.Content = dataContextHelper;
            }
        }
        public override void OnUpdateEditBinding(DataColumnBase dataColumn, ContentControl uiElement, object dataContext)
        {
            GridColumn column = dataColumn.GridColumn;

            if (column.SetCellBoundValue)
            {
                var dataContextHelper = new DataContextHelper {
                    Record = dataContext
                };
                dataContextHelper.SetValueBinding(column.ValueBinding, dataContext);
                uiElement.Content = dataContextHelper;
            }
            else
            {
                uiElement.SetBinding(ContentControl.ContentProperty, new Binding());
            }
        }
        /// <summary>
        /// Updates the tool tip for GridCell.
        /// </summary>
        /// <param name="dataColumn">Which holds GridColumn, Row Column Index and GridCell</param>
        public override void UpdateToolTip(DataColumnBase dataColumn)
        {
            var uiElement = dataColumn.ColumnElement;
            var column    = dataColumn.GridColumn;

            if (dataColumn.IsEditing || column == null || !column.ShowToolTip ||
                this is GridSummaryCellRenderer || this is GridCaptionSummaryCellRenderer ||
                this is GridTableSummaryCellRenderer)
            {
                uiElement.ClearValue(ToolTipService.ToolTipProperty);
                return;
            }

            object  dataContext = dataColumn.ColumnElement.DataContext;
            var     obj         = ToolTipService.GetToolTip(uiElement);
            ToolTip tooltip;

            if (obj is ToolTip)
            {
                tooltip = obj as ToolTip;
            }
            else
            {
                tooltip = new ToolTip();
            }
            if (column.hasToolTipTemplate || column.hasToolTipTemplateSelector)
            {
                if (column.SetCellBoundToolTip)
                {
                    var dataContextHelper = new DataContextHelper {
                        Record = dataContext
                    };
                    dataContextHelper.SetValueBinding(column.DisplayBinding, dataContext);
                    tooltip.Content = dataContextHelper;
                }
                else
                {
                    tooltip.Content = dataContext;
                }

                if (column.hasToolTipTemplate)
                {
                    tooltip.ContentTemplate = column.ToolTipTemplate;
                }
                else if (column.hasToolTipTemplateSelector)
                {
                    tooltip.ContentTemplateSelector = column.ToolTipTemplateSelector;
                }
            }
            else
            {
                //UWP-2846 - ToolTip value shown as namespace of the boolean instead of value either True or False for the CheckBoxColumn in UWP
                //So removed the code to set binding for ToolTip and assigned the cell value directly to the Content property
                //tooltip.SetBinding(ContentControl.ContentProperty, column.DisplayBinding);
                var provider = column.DataGrid.View.GetPropertyAccessProvider();
                if (provider != null)
                {
                    var displayText = Convert.ToString(provider.GetDisplayValue(dataColumn.ColumnElement.DataContext, column.MappingName, column.UseBindingValue));
                    tooltip.Content = displayText;
                    if (string.IsNullOrEmpty(displayText))
                    {
                        tooltip.IsEnabled = false;
                    }
                }
            }
            //WPF -23277 Unbound column display and value binding has been created based on its dummy mapping name. hence this content will be null.
            // so that have set the tooltip content directly for unbound column
            if (column.IsUnbound)
            {
                var unboundCellValue = Convert.ToString(this.DataGrid.GetUnBoundCellValue(column, dataColumn.ColumnElement.DataContext));
                tooltip.Content = unboundCellValue;
                if (string.IsNullOrEmpty(unboundCellValue))
                {
                    tooltip.IsEnabled = false;
                }
            }
            //Specifies to raise tooltip opening event for the corresponding cell
            if (dataColumn.RaiseCellToolTipOpening(tooltip))
            {
                ToolTipService.SetToolTip(uiElement, tooltip);
            }
            else
            {
                uiElement.ClearValue(ToolTipService.ToolTipProperty);
            }
        }