Un enumeratore è un costrutto offerto dai linguaggi di programmazione per definire un elenco fissato di elementi. Sorge spesso la necessità di ottenere una lista contenente gli elementi di un tipo enumeratore in modo da utilizzarla come sorgente dati in un controllo di selezione. In questo tip viene mostrato come popolare un controllo combo box in WPF utilizzando un'opportuna funzione di utilità specificatamente creata per risolvere questo problema.
enum EuropeanCountries
{
Austria, Belgium, Bulgaria, Cyprus, CzechRepublic, Denmark,
Estonia, Finland, France, Germany, Greece, Hungary,
Ireland, Italy,Latvia, Lithuania, Luxembourg, Malta,
Netherlands, Poland, Portugal, Romania, Slovakia,
Slovenia, Spain, Sweden, UnitedKingdom
}
Il metodo EnumToList<T> permette di ottenere la lista degli elementi di un qualsiasi tipo enumeratore:
class EnumHelper
{
public static List<T> EnumToList<T>()
{
Type enumType = typeof(T);
// Can't use type constraints on value types, so have to do check like this
if (enumType.BaseType != typeof(Enum))
throw new ArgumentException("T must be of type System.Enum");
Array enumValArray = Enum.GetValues(enumType);
List<T> enumValList = new List<T>(enumValArray.Length);
foreach (int val in enumValArray)
{
enumValList.Add((T)Enum.Parse(enumType, val.ToString()));
}
return enumValList;
}
}
Considerando la semplice interfaccia grafica definita dal seguente XAML...
<Window x:Class="EnumToList.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Enum to List Demo" Height="100" Width="300">
<Grid>
<StackPanel Name="stackPanel1" VerticalAlignment="Top">
<Label Height="27" Name="label1" VerticalAlignment="Top" >European Countries:</Label>
<ComboBox Height="23" Name="cbEuropeanCountries" VerticalAlignment="Top" />
</StackPanel>
</Grid>
</Window>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
cbEuropeanCountries.ItemsSource = EnumHelper.EnumToList<EuropeanCountries>();
}
}