Hilfsklasse für die Umwandlung eines ENUM in ein ListPickerItem
Bei der Entwicklung einer Beispiel App für mein Windows Phone 8 Kochbuch, wollte ich gern die ListBoxItems direkt aus den jeweiligen Enums erzeugen. Dabei ist folgende Hilfsklasse entstanden. Die Klasse EnumListItem nimmt den Wert und den Namen eines Enums auf. Da einige Aufzählungen nicht explizit über einen Standardwert verfügen, kann der Wert auch null sein, um den Standardwert zu repräsentieren.
///
/// Hilfsklasse für die Umwandlung eines ENUM in ein ListPickerItem
///
/// type des zu verwendenen Enums
public class EnumListItem where T : struct, IComparable {
public T? Value { get; set; }
public string Name { get; private set; }
public static IEnumerable<EnumListItem> CreateList(string defaultName = null) {
var res = from t in typeof (T).GetFields()
where t.IsLiteral
select new EnumListItem {
Value = (T?) t.GetValue(null),
Name = t.Name
};
return (string.IsNullOrEmpty(defaultName))
? (res.Union(new [] {new EnumListItem{ Name = defaultName, Value = null} }))
: res ;
}
}
Diese Klasse kann wie folgt verwendet werden:
// init white Balance Settings
var whiteBalanceItems =
EnumListItem<WhiteBalancePreset>.CreateList("Default").ToArray();
whiteBalanceList.ItemsSource =
whiteBalanceItems;
whiteBalanceList.SelectedItem =
whiteBalanceItems.FirstOrDefault(i => i.Value == null)
?? whiteBalanceItems.First();