Пример #1
0
        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);
        }
Пример #2
0
        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);
        }