/// <summary>
        /// Opens the FilterOptionPopup with the FilterOptionList.
        /// </summary>
        public virtual void OpenFilterOptionPopup()
        {
            if (this.FilterOptionButtonVisibility == Visibility.Collapsed)
            {
                return;
            }
            if (!this.ColumnBase.IsEditing)
            {
                this.ColumnBase.Renderer.DataGrid.SelectionController.CurrentCellManager.BeginEdit();
            }
            var list = this.GetFilterOptionsList();

            if (list.Count > 0)
            {
                this.FilterOptionsList.ItemsSource  = list;
                this.FilterOptionsList.SelectedItem = FilterRowHelpers.GetResourceWrapper(this.ColumnBase.GridColumn.FilterRowCondition);
#if !WPF
                this.FilterOptionPopup.VerticalOffset = this.ActualHeight;
#endif
                FilterOptionPopup.IsOpen = true;
#if WPF
                this.FilterOptionsList.ItemContainerGenerator.StatusChanged += OnItemContainerGeneratorStatusChanged;
#endif
            }
        }
        /// <summary>
        /// Process the filtering when the FilterRowCondition is changed in corresponding column.
        /// </summary>
        /// <param name="filterRowCondition">The new FilterRowCondition that have been changed.</param>
        public virtual void OnFilterRowConditionChanged(string filterRowCondition)
        {
            if (filterRowCondition == FilterRowHelpers.GetResourceWrapper(this.FilterRowCell.DataColumn.GridColumn.FilterRowCondition))
                return;

            this.FilterRowCell.DataColumn.GridColumn.UpdateFilterType(FilterRowHelpers.GetFilterRowCondition(filterRowCondition));
            object filterValue;
            if (this.IsInEditing)
                filterValue = this.GetControlValue();
            else
                filterValue = this.FilterRowCell.DataColumn.GridColumn.FilterPredicates.Count > 0 && this.FilterRowCell.DataColumn.GridColumn.FilteredFrom == FilteredFrom.FilterRow
                    ? this.FilterRowCell.DataColumn.GridColumn.FilterPredicates[0].FilterValue : null;
            var filterType = this.FilterRowCell.DataColumn.GridColumn.FilterRowCondition;
            this.ProcessSingleFilter(filterValue);
            this.SetFocus(true);
            if (this.IsInEditing && (filterType == FilterRowCondition.Empty || filterType == FilterRowCondition.NotEmpty || filterType == FilterRowCondition.NotNull
            || filterType == FilterRowCondition.Null))
            {                
                this.SetControlValue(null);
                this.DataGrid.SelectionController.CurrentCellManager.EndEdit();
            }
            else if (!this.IsInEditing)
#if WPF
                Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
                {
#endif
                    this.DataGrid.SelectionController.CurrentCellManager.BeginEdit();
#if WPF
                }), DispatcherPriority.ApplicationIdle);
#endif
        }
        /// <summary>
        /// Gets the FilterText that want to be displayed in particular FilterRow Cell.
        /// </summary>
        /// <param name="filterValues">The list of FilterPredicates that have been created to the particular column.</param>
        public virtual string GetFilterText(List<FilterPredicate> filterPredicates)
        {
            string _filterText = string.Empty;

            if (filterPredicates.Count > 0)
            {
#if WPF
                if(this.EditorType == typeof(ComboBoxAdv) && this.HasCurrentCellState)
                {
                    var comboBox = (ComboBoxAdv) this.CurrentCellRendererElement;
                    if (comboBox.AllowMultiSelect)
                    {
                        var selectedItems = ((IList) comboBox.SelectedItems).Cast<FilterRowElement>().ToList();
                        foreach (var item in selectedItems)
                        {
                            _filterText += item.DisplayText;
                            if (selectedItems.IndexOf(item) < selectedItems.Count - 1)
                                _filterText += comboBox.SelectedValueDelimiter;
                        }
                    }
                    else
                        _filterText = (comboBox.SelectedItem as FilterRowElement).DisplayText;
                    return _filterText;
                }
#endif
                var filterRowCond = this.FilterRowCell.DataColumn.GridColumn.FilterRowCondition;
                if (filterRowCond == FilterRowCondition.Null || filterRowCond == FilterRowCondition.NotNull
                    || filterRowCond == FilterRowCondition.Empty || filterRowCond == FilterRowCondition.NotEmpty)
                    _filterText = FilterRowHelpers.GetResourceWrapper(this.FilterRowCell.DataColumn.GridColumn.FilterRowCondition);
                else
                {
                    var filterValue = filterPredicates[0].FilterValue;
                    if (filterValue != null && filterValue.ToString() != string.Empty)
                        _filterText = this.FilterRowCell.DataColumn.GridColumn.GetFormatedFilterText(filterValue);
                }
            }

            return _filterText;
        }