Inheritance: System.Windows.Controls.DataGridTextColumn
        private void CreateTaskGridColumns()
        {
            Columns.Clear();

            Type t = ColumnGeneratingType;

            if (t == null)
                return;

            PropertyInfo[] infos = t.GetProperties();
            List<DataGridColumn> columns = new List<DataGridColumn>();

            bool isFirst = true;

            foreach (PropertyInfo info in infos)
            {
                GanttColumnAttribute[] atts = (GanttColumnAttribute[])info.GetCustomAttributes(typeof(GanttColumnAttribute), false);

                if (atts.Length > 0)
                {
                    GanttColumnAttribute att = atts[atts.Length - 1];

                    DataGridColumn dgc;
                    Binding bind = new System.Windows.Data.Binding(info.Name);

                    if (isFirst)
                    {
                        dgc = new GanttExpanderColumn();

                        Columns.Add(dgc);
                        (dgc as GanttExpanderColumn).RowExpandedChanged += new EventHandler<RowExpandedChangedEventArgs>(GanttDataGrid_RowExpandedChanged);
                        (dgc as GanttExpanderColumn).Binding = bind;

                        isFirst = false;
                    }
                    else
                    {
                        if (att.ColumnType == GanttColumnType.DateTime)
                        {
                            dgc = new GanttDateColumn();
                            Columns.Add(dgc);
                            bind.Mode = BindingMode.TwoWay;
                            (dgc as GanttDateColumn).Binding = bind;
                        }
                        else
                        {
                            dgc = new DataGridTextColumn();
                            Columns.Add(dgc);
                            (dgc as DataGridTextColumn).Binding = bind;
                        }
                    }

                    dgc.CanUserReorder = true;
                    dgc.CanUserResize = true;
                    dgc.CanUserSort = false;
                    dgc.Header = att.ColumnName;
                    dgc.IsReadOnly = !info.CanWrite;
                    dgc.DisplayIndex = att.ColumnIndex;

                }
            }

            //columns.Sort((a, b) => a.DisplayIndex.CompareTo(b.DisplayIndex));
            //foreach (DataGridColumn c in columns)
            //{
            //    Columns.Add(c);
            //}
        }
        private void CreateTaskGridColumns()
        {
            Columns.Clear();

            Type t = ColumnGeneratingType;

            if (t == null)
            {
                return;
            }

            PropertyInfo[]        infos   = t.GetProperties();
            List <DataGridColumn> columns = new List <DataGridColumn>();

            bool isFirst = true;

            foreach (PropertyInfo info in infos)
            {
                GanttColumnAttribute[] atts = (GanttColumnAttribute[])info.GetCustomAttributes(typeof(GanttColumnAttribute), false);

                if (atts.Length > 0)
                {
                    GanttColumnAttribute att = atts[atts.Length - 1];

                    DataGridColumn dgc;
                    Binding        bind = new System.Windows.Data.Binding(info.Name);

                    if (isFirst)
                    {
                        dgc = new GanttExpanderColumn();

                        Columns.Add(dgc);
                        (dgc as GanttExpanderColumn).RowExpandedChanged += new EventHandler <RowExpandedChangedEventArgs>(GanttDataGrid_RowExpandedChanged);
                        (dgc as GanttExpanderColumn).Binding             = bind;

                        isFirst = false;
                    }
                    else
                    {
                        if (att.ColumnType == GanttColumnType.DateTime)
                        {
                            dgc = new GanttDateColumn();
                            Columns.Add(dgc);
                            bind.Mode = BindingMode.TwoWay;
                            (dgc as GanttDateColumn).Binding = bind;
                        }
                        else
                        {
                            dgc = new DataGridTextColumn();
                            Columns.Add(dgc);
                            (dgc as DataGridTextColumn).Binding = bind;
                        }
                    }

                    dgc.CanUserReorder = true;
                    dgc.CanUserResize  = true;
                    dgc.CanUserSort    = false;
                    dgc.Header         = att.ColumnName;
                    dgc.IsReadOnly     = !info.CanWrite;
                    dgc.DisplayIndex   = att.ColumnIndex;
                }
            }

            //columns.Sort((a, b) => a.DisplayIndex.CompareTo(b.DisplayIndex));
            //foreach (DataGridColumn c in columns)
            //{
            //    Columns.Add(c);
            //}
        }