Feedback

WPF Markup Erweiterung für Enumerationswerte

Sprache: C#

[u][b]Hinweis:[/b] Dieses Snippet nimmt nicht am Wettbewerb teil![/u] Dieses Snippet ist eine Markup Erweiterung für WPF um eine Eigenschaft mit den Werten einer Enumeration zu befüllen. [b]Benötigte Namespaces[/b] System System.Windows.Markup [b]Verwendung[/b] [code]<ComboBox ItemsSource="{local:EnumSource HorizontalAlignment}"/>[/code]
/// <summary>
/// Stellt eine Markup Erweiterung bereit die die Elemente einer Enumeration zurück gibt.
/// </summary>
public class EnumSource : MarkupExtension
{
    /// <summary>
    /// Erstellt eine neue Instanz der <see cref="EnumSource"/>-Klasse.
    /// </summary>
    /// <param name="enumType">Der Typ der Enumeration der verwendet werden soll.</param>
    /// <exception cref="ArgumentNullException">Wird ausgelöst, wenn <paramref name="enumType"/> <c>null</c> ist.</exception>
    /// <exception cref="NotSupportedException">Wird ausgelöst, wenn <paramref name="enumType"/> nicht der Typ einer Enumeration ist.</exception>
    public EnumSource(Type enumType)
    {
        if (enumType == null)
        {
            throw new ArgumentNullException(nameof(enumType), $"The {nameof(enumType)} parameter must be the type of an enum.");
        }
        if (!enumType.IsEnum)
        {
            throw new NotSupportedException($"The passed type in the {nameof(enumType)} parameter is not an enum");
        }

        EnumType = enumType;
    }

    /// <summary>
    /// Ruft den Enumerationstyp ab dessen Member aufgelistet werden sollen.
    /// </summary>
    public Type EnumType { get; private set; }

    /// <summary>
    /// Ruft die Member von <see cref="Enumtype"/> ab.
    /// </summary>
    /// <param name="serviceProvider">Wird in dieser Implementierung nicht benötigt.</param>
    /// <returns>Die Member von <see cref="Enumtype"/>.</returns>
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Enum.GetValues(EnumType);
    }
}
/// <summary>
/// Stellt eine Markup Erweiterung bereit die die Elemente einer Enumeration zurück gibt.
/// </summary>
public class EnumSource : MarkupExtension
{
    /// <summary>
    /// Erstellt eine neue Instanz der <see cref="EnumSource"/>-Klasse.
    /// </summary>
    /// <param name="enumType">Der Typ der Enumeration der verwendet werden soll.</param>
    /// <exception cref="ArgumentNullException">Wird ausgelöst, wenn <paramref name="enumType"/> <c>null</c> ist.</exception>
    /// <exception cref="NotSupportedException">Wird ausgelöst, wenn <paramref name="enumType"/> nicht der Typ einer Enumeration ist.</exception>
    public EnumSource(Type enumType)
    {
        if (enumType == null)
        {
            throw new ArgumentNullException(nameof(enumType), $"The {nameof(enumType)} parameter must be the type of an enum.");
        }
        if (!enumType.IsEnum)
        {
            throw new NotSupportedException($"The passed type in the {nameof(enumType)} parameter is not an enum");
        }

        EnumType = enumType;
    }

    /// <summary>
    /// Ruft den Enumerationstyp ab dessen Member aufgelistet werden sollen.
    /// </summary>
    public Type EnumType { get; private set; }

    /// <summary>
    /// Ruft die Member von <see cref="Enumtype"/> ab.
    /// </summary>
    /// <param name="serviceProvider">Wird in dieser Implementierung nicht benötigt.</param>
    /// <returns>Die Member von <see cref="Enumtype"/>.</returns>
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Enum.GetValues(EnumType);
    }
}