private void handleListFilterType() { if (FilterCurrentData.Type == FilterType.List) { ComboBox comboBox = this.Template.FindName("PART_ComboBoxFilter", this) as ComboBox; DataGridComboBoxColumn column = AssignedDataGridColumn as DataGridComboBoxColumn; if (comboBox != null && column != null) { if (DataGridComboBoxExtensions.GetIsTextFilter(column)) { FilterCurrentData.Type = FilterType.Text; initControlType(); } else //list filter type { Binding columnItemsSourceBinding = null; columnItemsSourceBinding = BindingOperations.GetBinding(column, DataGridComboBoxColumn.ItemsSourceProperty); if (columnItemsSourceBinding == null) { System.Windows.Setter styleSetter = column.EditingElementStyle.Setters.First(s => ((System.Windows.Setter)s).Property == DataGridComboBoxColumn.ItemsSourceProperty) as System.Windows.Setter; if (styleSetter != null) { columnItemsSourceBinding = styleSetter.Value as Binding; } } comboBox.DisplayMemberPath = column.DisplayMemberPath; comboBox.SelectedValuePath = column.SelectedValuePath; if (columnItemsSourceBinding != null) { BindingOperations.SetBinding(comboBox, ComboBox.ItemsSourceProperty, columnItemsSourceBinding); } comboBox.RequestBringIntoView += new RequestBringIntoViewEventHandler(setComboBindingAndHanldeUnsetValue); } } } }
private string getValuePropertyBindingPath(DataGridColumn column) { string path = String.Empty; if (column is DataGridBoundColumn) { DataGridBoundColumn bc = column as DataGridBoundColumn; // VIKRAM: Added support for MultiBindings if (bc.Binding is Binding) { path = (bc.Binding as Binding).Path.Path; } else { // assume Multibinding with data as the first binding path = ((bc.Binding as MultiBinding).Bindings[0] as Binding).Path.Path; } // END VIKRAM } else if (column is DataGridTemplateColumn) { DataGridTemplateColumn tc = column as DataGridTemplateColumn; object templateContent = tc.CellTemplate.LoadContent(); if (templateContent != null && templateContent is TextBlock) { TextBlock block = templateContent as TextBlock; BindingExpression binding = block.GetBindingExpression(TextBlock.TextProperty); path = binding.ParentBinding.Path.Path; } } else if (column is DataGridComboBoxColumn) { DataGridComboBoxColumn comboColumn = column as DataGridComboBoxColumn; path = null; Binding binding = ((comboColumn.SelectedValueBinding) as Binding); if (binding == null) { binding = ((comboColumn.SelectedItemBinding) as Binding); } if (binding == null) { binding = comboColumn.SelectedValueBinding as Binding; } if (binding != null) { path = binding.Path.Path; } if (comboColumn.SelectedItemBinding != null && comboColumn.SelectedValueBinding == null) { if (path != null && path.Trim().Length > 0) { if (DataGridComboBoxExtensions.GetIsTextFilter(comboColumn)) { path += "." + comboColumn.DisplayMemberPath; } else { path += "." + comboColumn.SelectedValuePath; } } } } return(path); }