This question is locked. New answers and comments are not allowed.
the custom control below is working well for displaying values in the dropdown. But what it IS NOT doing is saving changes a user makes when they select an item in the dropdown. What would I have to add to achieve that? Thank you.
public class IWGridViewComboColumn : GridViewComboBoxColumn { public String Text { get { return (String)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(IWGridViewComboColumn), new PropertyMetadata(null)); public IWGridViewComboColumn() { } public override FrameworkElement CreateCellEditElement(GridViewCell cell, object dataItem) { base.CreateCellEditElement(cell, dataItem); var currentcontrol = cell.Content; if (currentcontrol != null && currentcontrol.GetType() == typeof(ComboBox)) Text = ((ComboBox)currentcontrol).SelectedValue.ToString(); StackPanelWComboBox panel = null; if (this.DataMemberBinding != null) { this.BindingTarget = StackPanelWComboBox.TextProperty; } if (panel == null) { AppliedStandardsModel app_std_Model = (AppliedStandardsModel)dataItem; if (app_std_Model.Class != "NA") { panel = new StackPanelWComboBox(dataItem, ActualWidth, MinWidth); } } if (this.DataMemberBinding != null) { panel.SetBinding(this.BindingTarget, this.CreateValueBinding()); } panel.Text = Text; return panel as FrameworkElement; } public override FrameworkElement CreateCellElement(GridViewCell cell, object dataItem) { base.CreateCellElement(cell, dataItem); var currentcontrol = cell.Content; StackPanelWComboBox panel = null; if (currentcontrol != null) { panel = cell.Content as StackPanelWComboBox; } if (this.DataMemberBinding != null) { this.BindingTarget = StackPanelWComboBox.TextProperty; } if (panel == null) { AppliedStandardsModel app_std_Model = (AppliedStandardsModel)dataItem; if (app_std_Model.Class != "NA") //Don't even show user combobox, just leave cell blank. { panel = new StackPanelWComboBox(dataItem, 90, 90); } } if (this.DataMemberBinding != null) { panel.SetBinding(this.BindingTarget, this.CreateValueBinding()); } return panel; } private Binding CreateValueBinding() { var valueBinding = new Binding(); valueBinding.Mode = BindingMode.TwoWay; valueBinding.NotifyOnValidationError = true; valueBinding.ValidatesOnExceptions = true; valueBinding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit; valueBinding.Path = new PropertyPath(this.DataMemberBinding.Path.Path); return valueBinding; } public override void CopyPropertiesFrom(GridViewColumn source) { base.CopyPropertiesFrom(source); var gridViewEasyEntryTextColumn = source as IWGridViewComboColumn; if (gridViewEasyEntryTextColumn != null) { this.Text = gridViewEasyEntryTextColumn.Text; } } public override IList<ValidationError> UpdateSourceWithEditorValue(GridViewCell gridViewCell) { List<ValidationError> errors = new List<ValidationError>(); StackPanelWComboBox editor = gridViewCell.GetEditingElement() as StackPanelWComboBox; BindingExpression bindingExpression = editor.ReadLocalValue(StackPanelWComboBox.TextProperty) as BindingExpression; if (bindingExpression != null) { bindingExpression.UpdateSource(); errors.AddRange(Validation.GetErrors(editor)); } return errors; } public override object GetNewValueFromEditor(object editor) { StackPanelWComboBox panel = editor as StackPanelWComboBox; if (panel != null) { panel.Text = panel.tb.SelectedValue.ToString(); return panel.tb.SelectedValue.ToString(); } else { return null; } } } } public class StackPanelWComboBox : StackPanel { public ComboBox tb = null; //public Button button = null; #region Dependency Properties /// <summary> /// End ShowLabel Begin Click /// </summary> public static readonly DependencyProperty ClickProperty = DependencyProperty.Register( "Click", // property name typeof(RoutedEventHandler), // type of property typeof(StackPanelWComboBox), // type of provider new PropertyMetadata(ClickChanged)); // Callback invoked on property value has changes. public RoutedEventHandler Click { get { return (RoutedEventHandler)GetValue(ClickProperty); } set { SetValue(ClickProperty, value); } } private static void ClickChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { } /// <summary> /// End Click Begin Text /// </summary> public static readonly DependencyProperty TextProperty = DependencyProperty.Register( "Text", //property name typeof(String), //type of property typeof(StackPanelWComboBox), //type of provider new PropertyMetadata(TextChanged)); //Callback invoked on property value has changes. public String Text { get { return (String)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } private static void TextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { StackPanelWComboBox sh = (StackPanelWComboBox)d; if (sh.tb == null || e.NewValue == null) return; sh.tb.SelectedValue = e.NewValue.ToString(); } /// <summary> /// end text /// </summary> #endregion public object CommandParameter { set{ if (tb == null) return; tb.Tag = value; } get{ if (tb == null) return null; return tb.Tag; } } public StackPanelWComboBox() { } public StackPanelWComboBox(object dataItem, double width, double minwidth) { createContents(dataItem, width, minwidth); } public List<EMC_Class> ABCD { get { List<EMC_Class> lst = new List<EMC_Class>(); try { foreach (var x in new EMC_Class[] { new EMC_Class { ClassID = 0, ClassName = "A" }, new EMC_Class { ClassID = 1, ClassName = "B" }, new EMC_Class { ClassID = 2, ClassName = "C" }, new EMC_Class { ClassID = 3, ClassName = "D" } }) { lst.Add(x); } return lst; } catch (Exception ex) { throw; } return lst; } } public List<EMC_Class> AB { get { List<EMC_Class> lst = new List<EMC_Class>(); try { foreach (var x in new EMC_Class[] { new EMC_Class { ClassID = 0, ClassName = "A" }, new EMC_Class { ClassID = 1, ClassName = "B" }, }) { lst.Add(x); } return lst; } catch (Exception ex) { throw; } return lst; } } public List<EMC_Class> NA { get { List<EMC_Class> lst = new List<EMC_Class>(); try { foreach (var x in new EMC_Class[] { new EMC_Class { ClassID = 0, ClassName = " " }, }) { lst.Add(x); } return lst; } catch (Exception ex) { throw; } return lst; } } public class EMC_Class { public int ClassID { get; set; } public string ClassName { get; set; } } public void createContents(object dataItem, double width, double minwidth) { Children.Clear(); Orientation = Orientation.Horizontal; HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; tb = new ComboBox(); tb.Width = width; tb.MinWidth = width; AppliedStandardsModel app_std_Model = (AppliedStandardsModel)dataItem; if (app_std_Model.ClassUserSelected != null) { tb.DisplayMemberPath = "ClassName"; tb.SelectedValuePath = "ClassUserSelected"; tb.SelectedValue = app_std_Model.ClassUserSelected; } switch (app_std_Model.Class) { case "NA": tb.ItemsSource = NA; break; case "A or B": tb.ItemsSource = AB; break; case "A, B, C, D": tb.ItemsSource = ABCD; break; } Children.Add(tb); } }