private void cboFieldName_SelectionChanged(object sender, Infragistics.Controls.Editors.SelectionChangedEventArgs e) { if (sender is Infragistics.Controls.Editors.XamMultiColumnComboEditor) { Infragistics.Controls.Editors.XamMultiColumnComboEditor cb = sender as Infragistics.Controls.Editors.XamMultiColumnComboEditor; if (cb.SelectedIndex == -1) { return; } FilterItem curItem = (FilterItem)((ListBoxItem)lbMain.ContainerFromElement(cb)).Content; //FcItems[lbMain.SelectedIndex]; if (curItem != null) { cField prevITem = null; try { prevITem = e.RemovedItems[0] as cField; } catch { } //curItem.Field = e.AddedItems[0] as cField; FcItems_Set_newField_Value(curItem, e.AddedItems[0] as cField); int pos = lbMain.Items.IndexOf(curItem); //dynamic item = lbMain.[pos]; ListBoxItem item = lbMain.ItemContainerGenerator.ContainerFromIndex(pos) as ListBoxItem; System.Windows.Controls.Image imgtype = VisualTree.FindFirstElementInVisualTree <System.Windows.Controls.Image>(item); if (prevITem != null && curItem.Field != null && prevITem.FieldType != curItem.Field.FieldType) { imgtype.Tag = Enum.GetName(typeof(Strings4Enums.qFieldType), curItem.Field.FieldType); imgtype.Source = new ImageSourceConverter().ConvertFromString(getImageAttr_Type(curItem.Field.FieldType)) as ImageSource; } ComboBox cboAttrClause = VisualTree.SearchVisualTreeForCombo(item, "cboClause"); if (cboAttrClause != null) { Debug.WriteLine(cboAttrClause.Name); oClausesLoad(_CaseSensitive); cboAttrClause.ItemsSource = oClauses.Where(c => c.Attr_Type == curItem.Field.FieldType); cboAttrClause.DisplayMemberPath = "Text"; cboAttrClause.SelectedValuePath = "Attr_Clause"; cboAttrClause.SelectedIndex = 0; //curItem.Clauses = ((dynamic)cboAttrClause.SelectedItem).Attr_Clause; FcItems_Set_newClause_Value(curItem, ((dynamic)cboAttrClause.SelectedItem).Attr_Clause); } //FcItems[FcItems.IndexOf(curItem)].Field = curItem.Field; // FcItems[pos].Clauses = curItem.Clauses; //Debug.WriteLine(curItem.Field.FieldName); } } }
void FcItems_Set_newField_Value(FilterItem curItem, cField newField) { foreach (var fcitem in _viewModel.FilterItems) //foreach (var fcitem in FcItems) { if (fcitem == curItem) { System.Reflection.PropertyInfo[] Fields = fcitem.GetType().GetProperties(); foreach (System.Reflection.PropertyInfo field in Fields) { var currentField = field.GetValue(fcitem, null); if (field.PropertyType.Name == "cField") { field.SetValue(fcitem, newField); return; } } } } }