public void ReconfigureTreeColumns() {
			if (!DataLayer.IsConnected) {
				return;
			}

            tvWorkitems.HideEditor();
            tvWorkitems.Columns.Clear();
            tvWorkitems.NodeControls.Clear();
            columnToAttributeMappings.Clear();

			foreach (var column in configuration.GridSettings.Columns) {
                if (column.EffortTracking && !DataLayer.EffortTracking.TrackEffort) {
					continue;
				}
                var columnName = DataLayer.LocalizerResolve(column.Name);
                var dataPropertyName = columnName.Replace(" ", string.Empty);

                columnToAttributeMappings.Add(dataPropertyName, column.Attribute);

                var treeColumn = new TreeColumn(columnName, column.Width) { SortOrder = SortOrder.None, TooltipText = dataPropertyName };

			    switch(column.Type) {
                    case "String":
                    case "Effort":
                        var textEditor = new CustomNodeTextBox();
                        ConfigureEditor(textEditor, dataPropertyName);
                        textEditor.EditEnabled = !textEditor.IsReadOnly;
                        textEditor.IsColumnReadOnly = column.ReadOnly;
                        textEditor.ParentColumn = treeColumn;
                        textEditor.IsEditEnabledValueNeeded += CheckCellEditability;
                        tvWorkitems.NodeControls.Add(textEditor);
                        textEditor.KeyTextBoxDown += tvWorkitems_PreviewKeyDown;
                        break;
                    case "List":
                        var listEditor = new NodeComboBox();
                        ConfigureEditor(listEditor, dataPropertyName);
                        listEditor.EditEnabled = !column.ReadOnly;
                        listEditor.ParentColumn = treeColumn;
                        listEditor.IsEditEnabledValueNeeded += CheckCellEditability;
                        tvWorkitems.NodeControls.Add(listEditor);
                        listEditor.KeyComboBoxDown += tvWorkitems_PreviewKeyDown;
                        break;
                    case "Multi":
			            var listBoxEditor = new NodeListBox {ParentTree = tvWorkitems};
			            ConfigureEditor(listBoxEditor, dataPropertyName);
                        listBoxEditor.EditEnabled = !column.ReadOnly;
                        listBoxEditor.ParentColumn = treeColumn;
                        listBoxEditor.IsEditEnabledValueNeeded += CheckCellEditability;
                        tvWorkitems.NodeControls.Add(listBoxEditor);
                        listBoxEditor.KeyListBoxDown += tvWorkitems_PreviewKeyDown;
                        break;
                    default:
                        throw new NotSupportedException();
                }

				tvWorkitems.Columns.Add(treeColumn);
			}

            AddStateIcon();
        }
        public void ReconfigureTreeColumns()
        {
            if (!DataLayer.IsConnected)
            {
                return;
            }

            tvWorkitems.HideEditor();
            tvWorkitems.Columns.Clear();
            tvWorkitems.NodeControls.Clear();
            columnToAttributeMappings.Clear();

            foreach (var column in configuration.GridSettings.Columns)
            {
                if (column.EffortTracking && !DataLayer.EffortTracking.TrackEffort)
                {
                    continue;
                }

                var dataPropertyName = DataLayer.LocalizerResolve(column.Name);

                columnToAttributeMappings.Add(dataPropertyName, column.Attribute);

                var treeColumn = new TreeColumn(dataPropertyName, column.Width)
                {
                    SortOrder = SortOrder.None, TooltipText = dataPropertyName
                };

                switch (column.Type)
                {
                case "String":
                case "Effort":
                    var textEditor = new CustomNodeTextBox();
                    ConfigureEditor(textEditor, dataPropertyName);
                    textEditor.EditEnabled               = !textEditor.IsReadOnly;
                    textEditor.IsColumnReadOnly          = column.ReadOnly;
                    textEditor.ParentColumn              = treeColumn;
                    textEditor.IsEditEnabledValueNeeded += CheckCellEditability;
                    tvWorkitems.NodeControls.Add(textEditor);
                    break;

                case "List":
                    var listEditor = new NodeComboBox();
                    ConfigureEditor(listEditor, dataPropertyName);
                    listEditor.EditEnabled               = !column.ReadOnly;
                    listEditor.ParentColumn              = treeColumn;
                    listEditor.IsEditEnabledValueNeeded += CheckCellEditability;
                    tvWorkitems.NodeControls.Add(listEditor);
                    break;

                case "Multi":
                    var listBoxEditor = new NodeListBox {
                        ParentTree = tvWorkitems
                    };
                    ConfigureEditor(listBoxEditor, dataPropertyName);
                    listBoxEditor.EditEnabled               = !column.ReadOnly;
                    listBoxEditor.ParentColumn              = treeColumn;
                    listBoxEditor.IsEditEnabledValueNeeded += CheckCellEditability;
                    tvWorkitems.NodeControls.Add(listBoxEditor);
                    break;

                default:
                    throw new NotSupportedException();
                }

                tvWorkitems.Columns.Add(treeColumn);
            }

            AddStateIcon();
        }