public void BuildDataGrid(IList <ColumnItem> columns) { if (_dg == null) { return; } if (columns != null) { foreach (ColumnItem item in columns) { DataGridColumn col; if (item.Field.Equals("IsMarked")) { DataGridCheckBoxColumn cbCol = new DataGridCheckBoxColumn(); cbCol.IsReadOnly = false; col = cbCol; cbCol.Header = item.Header; Binding bind = new Binding(item.Field) { Mode = BindingMode.TwoWay }; cbCol.Binding = bind; } else { DataGridTextColumn textCol = new DataGridTextColumn(); col = textCol; textCol.Header = item.Header; Binding bind = new Binding(item.Field) { Mode = BindingMode.OneWay }; bind.ConverterCulture = System.Globalization.CultureInfo.GetCultureInfo(Properties.Resources.CultureName); if (!String.IsNullOrWhiteSpace(item.StringFormat)) { bind.StringFormat = item.StringFormat; } textCol.Binding = bind; } if (item.Alignment == CellAlignment.CENTER && _centerCellStyle != null) { col.CellStyle = _centerCellStyle; } if (item.MinWidth != null) { col.MinWidth = item.MinWidth.Value; } if (item.Width != null) { col.Width = item.Width.Value; } col.Visibility = item.IsVisible ? Visibility.Visible : Visibility.Collapsed; //Add column to datagrid _dg.Columns.Add(col); Control filterControl = null; if (_txtSearchPanel != null) { Binding widthBind = new Binding() { Path = new PropertyPath("ActualWidth"), Source = col, Mode = BindingMode.OneWay, Converter = _adjConv, ConverterParameter = "-2" }; LogItemProperty prop = (LogItemProperty)Enum.Parse(typeof(LogItemProperty), item.Field); IPropertyFilterInfo info = FilterManager.CreateFilterInfo(prop, _filterChanged); info.Control.SetBinding(TextBox.WidthProperty, widthBind); info.Control.ToolTip = String.Format(Resources.FilteredGridManager_BuildDataGrid_FilterTextBox_Tooltip, item.Header); info.Control.Tag = info.Control.ToolTip.ToString().ToLower(); info.Control.Visibility = item.IsVisible ? Visibility.Visible : Visibility.Collapsed; info.Control.Name = getTextBoxName(item.Field); _txtSearchPanel.Children.Add(info.Control); filterControl = info.Control; Filter.Add(prop, info.Filter); } columnMap.Add(item.Header, new Tuple <DataGridColumn, Control, string>(col, filterControl, item.Field)); } } _dg.ColumnReordered += OnColumnReordered; }