How to declare combobox itemTemplate that has Itemsource as Enum Values in WPF?

前端 未结 1 492
灰色年华
灰色年华 2020-12-31 20:55

I have a enum let\'s say

enum MyEnum
{
  FirstImage,
  SecondImage,
  ThirdImage,
  FourthImage
};

I have binded this Enum to my combobox i

1条回答
  •  轮回少年
    2020-12-31 21:27

    You can use a DataTrigger, but would be more maintainable if you used a Converter. Here's a sample that uses a DataTrigger for a view of the image and text by itself, and then the same DataTrigger to display the image and text in ListBox and ComboBox, and finally, a ListBox and ComboBox that use a Converter to display the image and text:

    XAML

    
    
        
            
        
    
        
    
            
                
                    
                
            
    
            
    
    
            
    
                
                    
                    
                
    
    
                
                    
                        
                            
                        
                    
                    
                        
                            
                        
                    
                    
                        
                            
                        
                    
                    
                        
                            
                        
                    
                    
                        
                            
                        
                    
                    
                        
                            
                        
                    
                
            
    
            
                
                    
                    
                
            
    
            
                
            
    
        
    
    
        
            
    
            
    
                
                    
    
                    
                
    
                
                    
    
                    
                
    
            
        
    
    
    

    Code Behind

    using System;
    using System.ComponentModel;
    using System.Globalization;
    using System.Windows;
    using System.Windows.Input;
    using System.Windows.Data;
    
    namespace WpfSandbox.EnumToImage
    {
        /// 
        /// Interaction logic for EnumToImage.xaml
        /// 
        public partial class EnumToImage : Window
        {
            public EnumToImage()
            {
                InitializeComponent();
            }
    
            private int i = 1;
            private void OnImageMouseUp( object sender, MouseButtonEventArgs e )
            {
                i++;
                Model.ImageEnum = ( Decade )i;
    
                if( i == 6 )
                    i = 0;
            }
        }
    
        public enum Decade
        {
            Ninties = 1,
            Eighties = 2,
            Seventies = 3,
            Sixties = 4,
            Fifties = 5,
            Forties = 6,
        };
    
        public class ImageViewModel : INotifyPropertyChanged
        {
            private Decade _imageEnum;
            public Decade ImageEnum
            {
                get { return _imageEnum; }
                set
                {
                    _imageEnum = value;
                    RaisePropertyChanged( "ImageEnum" );
                }
            }
    
            public ImageViewModel()
            {
                ImageEnum = Decade.Ninties;
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected void RaisePropertyChanged( string propertyName )
            {
                var handler = PropertyChanged;
                if( handler != null )
                {
                    handler( this, new PropertyChangedEventArgs( propertyName ) );
                }
            }
    
        }
    
        public class DecadeEnumImageConverter : IValueConverter
        {
            public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
            {
    
                var myEnum = ( Decade )Enum.Parse( typeof( Decade ), value.ToString() );
    
                switch( myEnum )
                {
                    case Decade.Ninties:
                        return "/EnumToImage/images/90s.jpg";
                    case Decade.Eighties:
                        return "/EnumToImage/images/80s.jpg";
                    case Decade.Seventies:
                        return "/EnumToImage/images/70s.jpg";
                    case Decade.Sixties:
                        return "/EnumToImage/images/60s.jpg";
                    case Decade.Fifties:
                        return "/EnumToImage/images/50s.jpg";
                    case Decade.Forties:
                        return "/EnumToImage/images/40s.jpg";
                    default:
                        throw new ArgumentOutOfRangeException();
                }
            }
    
            public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
            {
                throw new NotImplementedException();
            }
        }
    }
    

    0 讨论(0)
提交回复
热议问题