5/2/2008 13:33
El Bruno
[DSL] Interceptando los cambios en una propiedad

Buenas,
siguiendo con el trabajo con las Domain Specific Language Tools, y ahora con otro escenario bastante usual: la necesidad de validar el valor de una propiedad con código personalizado. Existen varios tipos de validaciones que podemos configurar utilizando las Domain Specific Language Tools, sin embargo en este caso, quiero mostrar como podemos codificar una.
Si partimos de los ejemplos anteriores donde poseemos un elemento llamado UserElement que a su vez posee una propiedad llamada UserState al mismo, veremos que dentro del codigo generado podemos encontrar la siguiente estructura, donde para cada propiedad generada se crea a su vez una clase llamada [PropertyName]PropertyHandler, como se muestra en la imagen a la derecha.
En nuestro caso para poder capturar el cambio de los valores en la propiedad UserState, crearemos una nueva clase parcial donde sobreescribiremos la rutina OnValueChanged() para poder capturar el cambio de valor.
1 public partial class UserElement
2 {
3 internal sealed partial class UserStatePropertyHandler
4 {
5 /// <summary>
6 /// Occurs after a property value has been changed.
7 /// </summary>
8 /// <param name="element">Element which owns the property.</param>
9 /// <param name="oldValue">Old value of the property.</param>
10 /// <param name="newValue">New value of the property.</param>
11 protected override void OnValueChanged(UserElement element, bool oldValue, bool newValue)
12 {
13 // log change
14 string msg = string.Format("UserElement property changed: [{0}] to [{1}]", oldValue, newValue);
15 Trace.WriteLine(msg);
16 base.OnValueChanged(element, oldValue, newValue);
17 }
18 }
19 }
Como podemos ver en el ejemplo de código anterior, cada vez que se cambie el valor de la propiedad, registraremos un string en el Trace por defecto de Visual Studio (Output Viewer); además si queremos controlar el posible valor de una propiedad y cancelar el cambio de la misma podemos trabajar con la rutina OnValueChanging().
Como siempre, existen otras formas muchó más complicadas de lograr el mismo funcionamiento, pero esta es simple y efectiva. El código del ejemplo, se puede descargar desde http://geeks.ms/files/folders/elbruno/entry69160.aspx y siempre viene bien verlo en funcionamiento (para demostrar que no es magia !!!)
Video: DSL - Property Chage Event
Saludos @ La Finca
El Bruno
Crossposting from
ElBruno.com
Archivado en: Visual Studio,VSTS,DSL Tools
Comparte este post: