private Telerik.Windows.Controls.GridViewColumnCollection CreateColumns()
        {
            int columnCount = 1000;
            int rowCount = 1000000;

            Items = new ObservableCollection<MyObject>(from i in Enumerable.Range(0, rowCount) select new MyObject(i));
            MyConverter converter = new MyConverter();
            Telerik.Windows.Controls.GridViewColumnCollection columns = new Telerik.Windows.Controls.GridViewColumnCollection();


            for (int i = 0; i < columnCount; i++)
            {
                GridViewDataColumn column = new GridViewDataColumn();
                column.Header = string.Format("Column {0}", i);
                column.IsReadOnly = true;
                column.ShowFieldFilters = false;
                column.Width = 150;

                Binding binding = new Binding("ID");
                binding.Converter = converter;
                binding.ConverterParameter = i;
                column.DataMemberBinding = binding;

                columns.Add(column);
            }

            return columns;
        }
        /// <summary>
        /// The generated columns for grid.
        /// </summary>
        /// <returns>
        /// The <see cref="GridViewColumnCollection"/>.
        /// </returns>
        private GridViewColumnCollection GeneratedColumnsForGrid()
        {
            if (MembersTable == null)
            {
                return null;
            }
            var columns = new GridViewColumnCollection();

            /*
            // Toggle Row Details.
            if (!string.IsNullOrEmpty(RowDetailTemplateKey))
            {
                GridViewToggleRowDetailsColumn toggleColumn = new GridViewToggleRowDetailsColumn();
                toggleColumn.SetBinding(GridViewToggleRowDetailsColumn.IsVisibleProperty, new Binding
                {
                    Path = new PropertyPath("IsShowToggleRowDetail"),
                    Mode = BindingMode.TwoWay
                });

                columns.Add(toggleColumn);
            }
            */

            // Get Data Template for Columns
            DataTemplate columnSelectedHoverTemplate = (DataTemplate)Application.Current.Resources["ColumnSelectedHoverTemplate"];
            DataTemplate columnCheckedTemplate = (DataTemplate)Application.Current.Resources["ColumnCheckedTemplate"];
            DataTemplate columnRadioTemplate = (DataTemplate)Application.Current.Resources["ColumnRadioSelectedHoverTemplate"];
            DataTemplate columnEditDelSelectedHoverTemplate = (DataTemplate)Application.Current.Resources["ColumnEditDelSelectedHoverTemplate"];
            foreach (var dcolumn in MembersTable.Columns)
            {
                var gridColumn = new GridViewDataColumn { Header = dcolumn.Header, UniqueName = dcolumn.ColumnName };
                DynamicColumn customColumn = GridColumns.FirstOrDefault(d => d.ColumnName == dcolumn.ColumnName);

                var path = gridColumn.DataMemberBinding.Path.Path;
                gridColumn.DataMemberBinding = new Binding
                {
                    Path = new PropertyPath(path),
                    Mode = BindingMode.TwoWay
                };

                if (customColumn != null)
                {
                    // Set Data Template for Columns
                    if (customColumn.IsSelectedColumn && columnSelectedHoverTemplate != null)
                    {
                        gridColumn.CellTemplate = columnSelectedHoverTemplate;
                    }
                    if (customColumn.IsRadioSelectedColumn && columnRadioTemplate != null)
                    {
                        gridColumn.CellTemplate = columnRadioTemplate;
                    }
                    if (customColumn.Width != 0)
                    {
                        gridColumn.Width = customColumn.Width;
                    }
                    if (customColumn.MinWidth != 0)
                    {
                        gridColumn.MinWidth = customColumn.MinWidth; 
                    }
                    if (customColumn.DataFormatString != null)
                    {
                        gridColumn.DataFormatString = customColumn.DataFormatString;
                    }
                    if (!this.IsGridReadOnly)
                    {
                        gridColumn.IsReadOnly = customColumn.IsReadOnly;
                    }
                    gridColumn.TextAlignment = customColumn.TextAlignment;
                    gridColumn.HeaderTextAlignment = customColumn.HeaderTextAlignment;

                    if (FilteringGenerate)
                    {
                        switch (customColumn.FilteringTemplate)
                        {
                            case RadGridViewEnum.FilteringDataList:
                                gridColumn.IsFilterable = true;
                                gridColumn.FilterMemberPath = gridColumn.UniqueName;
                                //// column.DataMemberBinding = column.UniqueName;
                                gridColumn.FilteringControl = new FilteringDataList
                                                                  {
                                                                      ItemsSource = customColumn.FilteringDataSource,
                                                                      IsMultiSelect = true,
                                                                      Title = customColumn.FilteringTitle
                                                                  };
                                break;
                            case RadGridViewEnum.TextFieldFilter:
                                gridColumn.IsFilterable = true;
                                gridColumn.FilterMemberPath = gridColumn.UniqueName;
                                gridColumn.FilteringControl = new TextFieldFilter
                                                                  {
                                                                      AllOperators1 = customColumn.AllOperators,
                                                                      AllOperators2 = customColumn.AllOperators,
                                                                      AllLogicalOperator = customColumn.LogicalOperators,
                                                                      IsNumber = false
                                                                  };
                                break;
                            case RadGridViewEnum.FilteringComparision:
                                gridColumn.IsFilterable = true;
                                gridColumn.FilterMemberPath = gridColumn.UniqueName;
                                gridColumn.FilteringControl = new FilteringComparision
                                                                  {
                                                                      AllOperators1 = customColumn.AllOperators,
                                                                      AllOperators2 = customColumn.AllOperators,
                                                                      AllLogicalOperator = customColumn.LogicalOperators,
                                                                      IsNumber = false
                                                                  };
                                break;
                            case RadGridViewEnum.TextFieldDataListFilter:
                                gridColumn.IsFilterable = true;
                                gridColumn.FilterMemberPath = gridColumn.UniqueName;
                                gridColumn.FilteringControl = new TextFieldDataListFilter
                                                                  {
                                                                      ItemsSource = customColumn.FilteringDataSource,
                                                                      IsMultiSelect = true,
                                                                      Title = customColumn.FilteringTitle,
                                                                      AllOperators1 = customColumn.AllOperators,
                                                                      AllOperators2 = customColumn.AllOperators,
                                                                      AllLogicalOperator = customColumn.LogicalOperators,
                                                                      IsNumber = false
                                                                  };
                                break;
                            default:
                                gridColumn.IsFilterable = false;
                                break;
                        }
                    }
                    else
                    {
                        gridColumn.IsFilterable = false;
                    }

                    switch (customColumn.ColumnTemplate)
                    {
                        case RadGridViewEnum.ColumnCheckedTemplate:
                            if (columnCheckedTemplate != null)
                            {
                                gridColumn.CellTemplate = columnCheckedTemplate;
                            }
                            else
                            {
                                gridColumn.CellTemplate = columnRadioTemplate;
                            }
                            break;
                        case RadGridViewEnum.ColumnRadioSelectedHoverTemplate:
                            if (customColumn.IsRadioSelectedColumn)
                            {
                                gridColumn.CellTemplate = columnRadioTemplate;
                            }
                            break;
                        case RadGridViewEnum.ColumnSelectedHoverTemplate:
                            break;
                        case RadGridViewEnum.ColumnEditDelSelectedHoverTemplate:
                            if (columnEditDelSelectedHoverTemplate != null)
                            {
                                gridColumn.CellTemplate = columnEditDelSelectedHoverTemplate;
                            }
                            break;
                    }
                }

                columns.Add(gridColumn);
            }
            return columns;
        }