head.WriteLine()

Mittwoch, Mai 12, 2010

Externe Change Callbacks für Dependency Properties

Neulich kam in einem Training die Frage auf, wie man einen Change Callback an eine Dependency Property hängen kann. Im konkreten Fall ging es darum auf Eingabeänderungen in einer ComboBox zu reagieren. Da diese jedoch kein passendes Event hierfür vorsieht, muss manuell nachgeholfen werden.
Zwar bieten Dependecy Properties grundsätzlich die Möglichkeit über die Metadaten einen Change Callback einzuhängen, jedoch nur von der Klasse, welche die Property registriert.
Über die Klasse DependencyPropertyDescriptor kann man jedoch auch einen externen Handler einklinken und sich auf diese Weise - auch ohne Event - über Änderungen informieren lassen.
Das ganze funktioniert wie folgt:

DependencyPropertyDescriptor desc =
  DependencyPropertyDescriptor.FromProperty(
    ComboBox.TextProperty, typeof(ComboBox));
if (desc != null)
{
    desc.AddValueChanged(cbx, (s, e) => ... );
}

Aber wie immer gilt: Abmelden nicht vergessen (RemoveValueChanged), damit der Gargabe Collector später aufräumen kann ;)