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]

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.

/// <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!