private void HandleListFilterType() { if (FilterCurrentData.Type != FilterType.List) { return; } var comboBox = this.Template.FindName("PART_ComboBoxFilter", this) as ComboBox; var column = AssignedDataGridColumn as DataGridComboBoxColumn; if (comboBox == null || column == null) { return; } if (DataGridComboBoxExtensions.GetIsTextFilter(column)) { FilterCurrentData.Type = FilterType.Text; InitControlType(); } else //list filter type { BindingOperations.SetBinding(comboBox, ComboBox.ItemsSourceProperty, BindingOperations.GetBinding(column, ComboBox.ItemsSourceProperty)); comboBox.RequestBringIntoView += SetComboBindingAndHanldeUnsetValue; } }
private static string GetValuePropertyBindingPath(DataGridColumn column) { string path = String.Empty; if (column is DataGridBoundColumn) { var bc = column as DataGridBoundColumn; path = (bc.Binding as Binding).Path.Path; } else if (column is DataGridTemplateColumn) { var tc = column as DataGridTemplateColumn; object templateContent = tc.CellTemplate.LoadContent(); if (templateContent != null && templateContent is TextBlock) { var block = templateContent as TextBlock; BindingExpression binding = block.GetBindingExpression(TextBlock.TextProperty); path = binding.ParentBinding.Path.Path; } } else if (column is DataGridComboBoxColumn) { var comboColumn = column as DataGridComboBoxColumn; path = null; var 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); }