Feedback

C# - Enumwerte als ItemsSource

Veröffentlicht von am 05.11.2015
(0 Bewertungen)
Mit diesem Attached Property kann man einfach die Itemssource zB. einer ListBox mit den Werten eins enums setzen. So müssen die einzelnen Werte nicht explizit angegeben werden und das Control ist auch resistent gegen Änderungen im betreffenden Enumtyp (zB. kann ein neuer Wert nicht "vergessen werden")
GFU-Schulungen  [Anzeige]

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Projektmitglieder - Kompakt

Nach Teilnahme an dieser Schulung sind Ihnen die Grundlagen von ALM geläufig. Sie planen und steuern Projekte effizient mit dem Visual Studio Team Foundation Server.

/// <summary>
/// Implements a setter for the <c>ItemsSource</c>-property 
/// Usage: <c><![CDATA[<ListBox enumSource:EnumSource.EnumType="my:EnumType"/>]]></c>
/// </summary>
public class EnumSource : DependencyObject
{
	public static readonly DependencyProperty EnumTypeProperty =
		DependencyProperty.RegisterAttached(
			"EnumType",
			typeof(Type),
			typeof(EnumSource),
			new UIPropertyMetadata(null, EnumTypeChanged));

	public static Type GetEnumType(DependencyObject obj) => (Type)obj.GetValue(EnumTypeProperty);

	public static void SetEnumType(DependencyObject obj, Type value) => obj.SetValue(EnumTypeProperty, value);

	private static void EnumTypeChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
	{
		var enumType = GetEnumType(sender);
		if (enumType != null && !enumType.IsEnum)
		{
			throw new ArgumentException($"{enumType} is not an enum type");
		}

		var itemsSource = sender.GetType().GetProperty("ItemsSource");
		if (itemsSource == null)
		{
			throw new InvalidOperationException($"{sender} has no ItemsSource property");
		}

		itemsSource.SetValue(
			sender,
			enumType == null ? null : Enum.GetValues(enumType),
			null);
	}
}

Abgelegt unter WPF, ItemsSource, enum.

1 Kommentare zum Snippet

Koopakiller schrieb am 05.11.2015:
Ich hätte mich eher für eine Markup Extension entschieden:
http://dotnet-snippets.de/snippet/wpf-markup-erweiterung-fuer-enumerationswerte/11027

Trotzdem gute Idee!
 

Logge dich ein, um hier zu kommentieren!