private void combo_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Update DataContext ComboBox comboBox = (ComboBox)sender; CustomerViewModel customerViewModel = (CustomerViewModel)this.DataContext; Type _type = customerViewModel.GetType(); // verify if property name exists in model customerViewModel.VerifyPropertyName(StatusName); // use reflection to update selected value in data context PropertyInfo _propertyInfo = _type.GetProperty(StatusName.ToString()); EnumItem item = (EnumItem)combo.SelectedItem; Status MyStatus = (Status)Enum.Parse(typeof(Status), item.Value.ToString(), true); _propertyInfo.SetValue(customerViewModel, MyStatus); }
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { EnumItem item = value as EnumItem; if (item != null) { if (destinationType == typeof(String)) { return(item.ToString()); } if (destinationType == typeof(UIElement)) { object displayValue = item.DisplayValue; if (displayValue == null || displayValue is String) { TextBlock textBlock = new TextBlock(); textBlock.Text = item.ToString(); return(textBlock); } else if (displayValue is UIElement) { if (VisualTreeHelper.GetParent((UIElement)displayValue) != null) { // Clone UIElement to allow it to be used several times. string str = XamlWriter.Save(displayValue); StringReader sr = new StringReader(str); XmlReader xr = XmlReader.Create(sr); UIElement ret = (UIElement)XamlReader.Load(xr); return(ret); } else { return(displayValue); } } if (displayValue is DataTemplate) { ContentPresenter presenter = new ContentPresenter(); presenter.Content = item; presenter.ContentTemplate = (DataTemplate)displayValue; return(presenter); } else if (displayValue is Style) { TextBlock textBlock = new TextBlock(); textBlock.Style = (Style)displayValue; textBlock.Text = item.ToString(); return(textBlock); } else if (displayValue is ImageSource) { System.Windows.Controls.Image image = new System.Windows.Controls.Image(); image.Source = (ImageSource)displayValue; return(image); } else if (displayValue is Drawing) { System.Windows.Controls.Image image = new System.Windows.Controls.Image(); image.Source = new DrawingImage((Drawing)displayValue); return(image); } else if (displayValue is System.Windows.Media.Brush) { TextBlock textBlock = new TextBlock(); textBlock.Background = (System.Windows.Media.Brush)displayValue; textBlock.Text = item.ToString(); return(textBlock); } else { TypeConverter converter = TypeDescriptor.GetConverter(displayValue); if (converter.CanConvertTo(typeof(UIElement))) { UIElement element = converter.ConvertTo(context, culture, displayValue, typeof(UIElement)) as UIElement; if (element != null) { return(element); } } String text; if (converter.CanConvertTo(typeof(string))) { text = converter.ConvertToString(context, culture, displayValue); } else { text = displayValue.ToString(); } TextBlock textBlock = new TextBlock(); textBlock.Text = text; return(textBlock); } } if (destinationType == typeof(ImageSource)) { Object displayValue = item.DisplayValue; if (displayValue == null || displayValue is ImageSource) { return(displayValue); } ImageSourceConverter imageSourceConverter = new ImageSourceConverter(); if (imageSourceConverter.CanConvertFrom(context, displayValue.GetType())) { object convertedValue = imageSourceConverter.ConvertFrom(context, culture, displayValue); return(convertedValue); } } else { Object displayValue = item.DisplayValue; if (displayValue == null || destinationType.IsAssignableFrom(displayValue.GetType())) { return(displayValue); } TypeConverter converter = TypeDescriptor.GetConverter(destinationType); if (converter.CanConvertFrom(displayValue.GetType())) { object convertedValue = converter.ConvertFrom(context, culture, displayValue); return(convertedValue); } else { Debug.Print("Unable to convert display value to target type: " + destinationType.FullName); return(displayValue); } } } return(null); }