Está en la página 1de 38

PROGRAMACIÓN DE COMPONENTES DE

ESCRITORIO
UNIDAD Nº 3

Validaciones, Regex y Ejecutable de Aplicación

www.iplacex.cl
SEMANA 5

Introducción
Las aplicaciones permiten a los usuarios ingresan datos dentro de los
formularios. Esta información requerida a completar pueden ser datos
obligatorios, tener algún formato en concreto, un largo mínimo o que solo se
puedan ingresar un cierto tipo de caracteres. Gran parte de las veces, estos
criterios de validación estarán dados por las reglas de negocio. Estas son
validaciones que deben ser cumplidas para que los datos ingresados en los
formularios puedan ser almacenados de manera correcta dentro de las
bases de datos.

En WPF, que es le framework que se está utilizando para construir la interfaz


de usuario de las aplicaciones, es posible implementar diversas formas de
validación para las propiedades de la clase modelo, como lo puede ser
medio de los atributos de Data Annotations, la clase ValidationRule,
arrojando excepciones cuando no se cumplan los requerimientos y también
por medio de interfaces como IDataErrorInfo.

Todas estas formas de validación aplican la técnica del Binding, el cual


permite referenciar propiedades de una clase modelo a los controles que
permitan interactuar con los valores de esta.

Durante esta semana, te centrarás en realizar procesos de validación para


distintos tipos de datos y en distintos controles utilizando el Binding como
pieza fundamental.

www.iplacex.cl2
Ideas Fuerza
• Binding: técnica de programación que permite vincular
propiedades de una clase a los controles de la interfaz de usuario
• Modelo: clase principal, que contendrá las propiedades que
posteriormente serán validadas
• Reglas de negocio: criterios que un usuario debe cumplir para el
correcto almacenamiento de datos. Son especificados por el
cliente, aunque hay algunos que son integrados de forma natural
en una aplicación.

www.iplacex.cl3
Desarrollo

1. Resumen hasta ahora

A lo largo de esta asignatura nos hemos centrado en el desarrollo de


aplicaciones de escritorio con WPF, un framework frontend perteneciente a
las tecnologías de .NET. Su unidad base son las ventanas, las que podrán
contener diversos controles para generar instancias de interacción para el
usuario, como los formularios.

Tanto ventanas como controles poseen propiedades y eventos, los que


permiten aplicar diseño y funcionalidades un poco más complejas.

Imagen 1: Interfaz de usuario aplicación WPF

Fuente: www.iplacex.cl

Dentro de esta app de escritorio, se implementó un modelo de entidades,


capaz de servir como medio de conexión, seguridad, abstracción,

www.iplacex.cl4
representación y facilitador de la implementación de la base de datos y las
estructuras que la componen. Estas estructuras fueron las vistas,
procedimientos almacenados y funciones.

Cada una de estas cumplían un rol dentro de la administración de los


registros presentados en la aplicación

Imagen 2: Métodos de administración de datos en clase modelo

Fuente: www.iplacex.cl

Solo queda ver un punto muy importante a considerar en el desarrollo de las


aplicaciones: las validaciones de campos, las cuales son aplicadas a partir
de las reglas de negocio, y la seguridad de estos, aplicando métodos
criptográficos según la importancia del dato a asegurar.

www.iplacex.cl5
2. Binding

Antes de poder conocer los distintos tipos de validaciones que es posible


aplicar, es necesario conocer el concepto de Data Binding.

Data Binding es una forma de establecer conexión entre la interfaz de la


aplicación y la información que despliega por medio de controles. Si esta
conexión está construida de manera correcta, y los datos ingresados por el
usuario ejecutan las notificaciones de cambio adecuadas, cuando los
valores se vean modificados, cualquier elemento con los que estos estén
vinculados se verán actualizados automáticamente, mostrando o guardando
el nuevo valor.

Esto permite generar validaciones en tiempo real para las propiedades que
estén asociados a los controles de la interfaz de usuario.

Para poder realizar el binding, lo primero es establecer un modelo o clase


que contenga las propiedades que se van a establecer para el binding. Esto
puede ser realizado de dos maneras: en el constructor de la ventana o
directamente en el archivo xaml de la ventana. Para construir los ejemplos
de validaciones se implementará el caso de Supermercado, utilizado en
semanas anteriores.

Por un lado, la implementación a nivel de clase se verá de la siguiente


manera:

www.iplacex.cl6
Imagen 3: Definición de DataContext a nivel de clase

Fuente: www.iplacex.cl

Cada ventana posee asociado un DataContext. Este permite definir que


estructura se utilizará para el contexto de datos. En este caso, la clase
Producto.

Por otro lado, la implementación a nivel de xaml se realizará de la siguiente


manera:

www.iplacex.cl7
Imagen 4: Definición de DataContext a nivel de XAML

Fuente: www.iplacex.cl

Se deberá generar una nueva importación en la etiqueta Window utilizando


xmlns, en donde se creará una variable llamada model, que tendrá como
valor el namespace de la clase Producto y los DLLs de ensamblaje
correspondientes, para que el compilador pueda detectar desde donde se
está implementando dicha clase.

Luego, dentro de Window, se crea la etiqueta <Window.DataContext> y


dentro se implementa <model:Producto>, en donde model es el nombre de
la variable que se estableció anteriormente, y Producto la clase que se
utilizará.

Como recordarás, el formulario de creación de Productos tenía la siguiente


estructura:

www.iplacex.cl8
Imagen 5: Estructura formulario de registro de Producto

Fuente: www.iplacex.cl

En donde, cada propiedad de la clase tenía un control WPF en donde poder


establecer el valor que se guardará posteriormente en la base de datos. En
este caso, controles de tipo textbox.

Cuando se obtiene el valor ingresado por el usuario, se utiliza la propiedad


Text del textbox. Ahora, esta será definida a nivel de interfaz de usuario, en
donde se utilizarán las llaves { } y dentro se escribirá Binding seguido del
nombre de la clase. Quedando así

Imagen 6: Binding de propiedad Precio en código XAML

Fuente: www.iplacex.cl

Este principio es el mismo que sigue React o Angular al implementar las


llaves de interpolación, entregando la posibilidad de vincular una propiedad
de una clase al control desde donde su valor será establecido, sin importar
cual este.

El binding para algunos de los controles que se han utilizado en la asignatura


se hará en base a las siguientes props:

www.iplacex.cl9
Control Propiedad Ejemplo
CheckBox IsChecked IsChecked=”{Binding EsCasado}”
ComboBox ItemSource ItemSource=”{Binding CategoriaCollection}”
SelectedItem SelectedItem=”{Binding Categoria}”
Label Content Content=”{Binding Username}”
TextBox Text Text=”{Binding Username}”

www.iplacex.cl10
3. Reglas de negocio

Cuando somos usuarios de una aplicación y llenamos cada uno de los


campos presentes en los formularios, existen ciertas reglas y requerimientos
que debemos cumplir para que, la informacion ingresada pueda ser
almacenada de forma correcta, según las especificaciones puestas por los
desarrolladores.

Estas reglas, antes de ser presentadas en la aplicación para validar lo que


ingresa el usuario, son expresadas por el cliente en forma de requerimientos
conocidos como reglas de negocio.

Una regla de negocio es una condición que debe ser cumplida para
satisfacer un cierto requerimiento. En esta ocasión, el ingreso o formato de
un dato dentro de un formulario.

Estas validaciones pueden ser implementadas a distintos niveles dentro de


una aplicación:
• A nivel de una base de datos, utilizando funciones propias del sistema
o también funciones custom

www.iplacex.cl11
Imagen 7: Validación a nivel de base de datos en SQL Server

Fuente: www.medium.com – Validation in SQL Server

• A nivel de una API en forma de middlewares, con librerías y funciones


o dentro de los mismos modelos y schemas

Imagen 8: Validación a nivel de schema a nivel de API

Fuente: www.iplacex.cl

www.iplacex.cl12
• A nivel de clase en el método set de las propiedades que la
compongan

Imagen 9: Validación a nivel de método setter de propiedad de clase

Fuente: www.iplacex.cl

• A nivel de interfaz de usuario por medio de librerías o de


funcionalidades especiales que puedan existir

Imagen 10: Validación a nivel de interfaz de usuario

Fuente: www.iplacex.cl

En esta asignatura, veremos diversos caminos para validar los formularios


de la aplicación, aplicándolo a nivel de clase y a nivel de interfaz de usuario.

www.iplacex.cl13
4. Formas de validación implementables en WPF

En WPF es posible encontrar e implementar diversos caminos para generar


la validación de los campos. Todas estas formas poseen un elemento en
común: la implementación del método bool OnPropertyChanged()
proveniente desde la clase ObservableObject.

Esta clase contendrá dos métodos, los cuales estarán encargados de


verificar si el valor de la propiedad de una clase ha cambiado en base a la
interacción del usuario. Esta clase posee la siguiente estructura:

Imagen 11: Estructura clase ObservableObject

Fuente: www.iplacex.cl

El método bool OnPropertyChanged<T>() se encargará de evaluar si el


valor de la propiedad ha sido modificado a base a su valor anterior.

Además, dentro de este, se ejecutará el método de tipo void


OnPropertyChanged() que se encargará de crear una nueva instancia del
evento PropertyChangedEventArgs para notificar a la vista de usuario, del
cambio en el valor de una propiedad y poder ir mostrando al usuario si es
que debe o no corregir el valor introducido en base a él o los criterios de
validación establecidos.

Algo importante a destacar del método boolean visto, es que utiliza una
clase llamada CallerMemberName. Esta implementa un concepto

www.iplacex.cl14
denominado reflexión (reflection). Este tipo de programación permite crear,
entre otras cosas, generar que el compilador detecte de forma automática
el nombre de la propiedad que deberá ser validada por este método, sin
siquiera especificar el nombre de la propiedad como parámetro de entrada.

El método bool OnPropertyChanged<T>() de la clase ObservableObject


será implementado dentro de los métodos setter de las propiedades de una
clase modelo, para así generar las distintas instancias de validación de cada
una de sus propiedades.

Imagen 12: Implementación de método OnPropertyChanged a nivel de


método setter

Fuente: www.iplacex.cl

Sigamos considerando el caso de Supermercado que se ha estado


revisando en el material anteriormente.

Actualmente, esta clase luce de la siguiente manera (la estructura interna


de los métodos de administración ha sido obviados en la imagen):

www.iplacex.cl15
Imagen 13: Estructura de clase Producto

Fuente: www.iplacex.cl

Posee la misma estructura con la que se dejó en la unidad pasada, luego


de la implementación de IPersistente.

Ahora, modificaremos su estructura para que pueda implementar


ObservableObject a nivel de los métodos setter de las propiedades de
Nombre, Precio y Cantidad. Quedando de la siguiente manera (los métodos
de administración han sido obviados en la imagen, ya que no sufren
cambios):

www.iplacex.cl16
Imagen 14: Estructura de clase Producto con implementación de clase
ObservableObject

Fuente: www.iplacex.cl

www.iplacex.cl17
Si te fijas, para las propiedades de Nombre, Precio y Cantidad, en los
métodos setter de estas, se ejecuta el método OnPropertyChanged(),
pasando como parámetros de entrada: la referencia al atributo privado de
cada propiedad y su valor. Esto es el punta pie inicial al momento de generar
las validaciones en base a las reglas de negocio.

Antes de poder continuar con los distintos caminos para lograr las
validaciones, se creará un recurso de forma global dentro de la aplicación
de escritorio. Este, modificará aspectos visuales de los controles de tipo
TextBox y también mostrará el error en la validación de los campos para
algunos casos de validaciones.

Este recurso se definirá dentro la etiqueta <Application.Resources> del


App.xaml y tendrá la siguiente estructura:

Imagen 15: Template de mensaje de error dentro de App.xaml como


recurso global

Fuente: www.iplacex.cl

www.iplacex.cl18
Esta plantilla, mostrará por medio de un control de tipo TextBlock, el
mensaje de error según el criterio de validación que fue arrojado utilizando
Binding en la propiedad Text de los controles de tipo textbox.

IMPLEMENTACIÓN

La implementación de plantilla será implementada más adelante para


cada uno de los métodos de validación.

Para cada una de estas propiedades presentes dentro de esta clase, es


posible aplicar diversas formas de validaciones. Podemos encontrar cuatro:

a. Exception

Este método de validación permite arrojar una nueva excepción en


base a un error o errores en específico. Por ejemplo, tomando el caso
de Supermercado. La propiedad Nombre de la clase Producto, si está
vacía entonces se arrojará una nueva excepción de tipo
ArgumentNullException para especificar que el campo no puede estar
vacio.

Imagen 16: Implementación de ArgumentNullException en método setter


de propiedad de la clase

Fuente: www.iplacex.cl

Esta excepción será arrojada y mostrada, deteniendo la ejecución de


la aplicación, a menos que esta sea atrapada posteriormente, como
es el caso actual, en donde el evento click del botón posee un try catch

www.iplacex.cl19
para atrapar las excepciones que se generen y que puedan ser
mostradas por medio de un MessageBox.

Imagen 17: Visualización de mensaje de error durante proceso de


validación con Exception

Fuente: www.iplacex.cl

Para campos de tipo integer, la implementación será de la misma


forma, solo que, aplicando otro tipo de criterios acorde al tipo de dato,
como, por ejemplo, que el precio no pueda ser menor que cero.

Anteriormente se creó un template para poder notificar de errores en


la validación de campos. Para que, a nivel de interfaz de usuario, el
campo vaya notificando de los errores, dentro del Binding, es
necesario implementar las propiedades ValidatesOnExceptions y
UpdateSourceTrigger.

El valor del primero será True y le indicará al campo de texto que debe
validar en base a las excepciones que se vayan ejecutando, y el de
segundo será PropertyChanged, que establecerá que la fuente de
datos, es decir, la propiedad proveniente desde la clase deba ser
actualizada cada vez que el usuario modifique el valor del control, por

www.iplacex.cl20
ejemplo, al ingresar nuevo carácter en una caja de texto o seleccione
una opción desde un combobox.

Imagen 18: Implementación de ValidatesOnExceptions y


UpdateSourceTrigger como parte del binding de propiedades

Fuente: www.iplacex.cl

Posteriormente, si el usuario ingresa datos dentro del formulario,


entonces, el campo de texto cambiará de color cuando se cumplan o
no las validaciones.

Imagen 19: Funcionamiento de la implementación de template de error

Fuente: www.iplacex.cl

www.iplacex.cl21
b. IDataErrorInfo

IDataErrorInfo es una interface que permite implementar validaciones


custom en clases y entidades, exponiendo el resultado de las
validaciones a nivel de la interfaz de usuario.

Esta interface implementará dos propiedades: string Error y string


this[string name], la cual es de tipo reflexiva, por lo que no se necesita
especificar a que propiedad de la clase apunta. Error, aunque será
invocada, no será implementada a nivel de WPF, ya que no es
necesario.

Sin embargo, para string this[string name] se definirá en su método


get, la implementación de un switch case, para evaluar cada una de
las propiedades de la clase y las validaciones creadas a partir de las
reglas de negocio.

Siguiendo con el ejemplo de Supermercado, esta vez,


implementaremos la validación por medio de esta interfaz en las
propiedades Nombre, Precio y Cantidad.

www.iplacex.cl22
Imagen 20: Implementación de propiedad this[string name] de
IDataErrorInfo dentro de clase Producto

Fuente: www.iplacex.cl

Esto permitirá a la interfaz detectar cuando se cumplan o no los


criterios de validación establecidos para las propiedades de la clase,
reflejándolos, por ejemplo, en el cambio de color del control WPF o en
una etiqueta label, según el requerimiento.

www.iplacex.cl23
Adicionalmente, para poder capturar estas validaciones y así
mostrarlas al usuario, se puede implementar una estructura
denominada Dictionary.

Un Dictionary o diccionario, permite establecer uno o muchos tipos de


datos que serán recibidos. Para este caso, recibirá dos variables de
tipo string, quedando definida como una propiedad dentro de la clase
de la siguiente manera:

Imagen 21: Definición de Dictionary para almacenamiento de mensajes de


error

Fuente: www.iplacex.cl

El primer string, corresponderá al nombre de la propiedad que se está


evaluando, y el segundo al resultado de la validación. Este diccionario
será implementado dentro de la propiedad get de string this al
finalizar el switch-case de la siguiente manera:

Imagen 22: Implementación de Dictionary para el almacenamiento de


mensajes de error

Fuente: www.iplacex.cl
www.iplacex.cl24
A nivel de interfaz de usuario, al contrario de las validaciones de tipo
Exception que se implementaba ValidatesOnExceptions, aquí se
utilizará ValidatesOnDataErrors, que tendrá true como valor asignado.

UpdateSourceTrigger seguirá teniendo PropertyChanged como valor.

Imagen 23: Implementación de ValidatesOnDataErrors y ToolTip para


mostrar mensaje de error

Fuente: www.iplacex.cl

Si el usuario, entonces, ingresa datos erróneos en los campos de


texto, entonces, este cambiará de color mostrando también el error
almacenado en el diccionario ErrorCollection en base al nombre de la
propiedad por medio del atributo ToolTip del control.

www.iplacex.cl25
Imagen 24: Visualización de mensaje de error durante proceso de
validación con IDataErrorInfo

Fuente: www.iplacex.cl

c. ValidationRule

Otra forma de validaciones posibles a implementar es por medio de la


clase ValidationRule. Esta clase implementa el método Validate() el
que debe ser sobrescrito para poder crear la regla de validación. Para
este tipo de validación, no es necesario modificar la clase Producto.

A modo de ejemplo, implementaremos este tipo de validación solo


para el campo Nombre de la clase de Producto.

Lo primero, será agregar una nueva clase (puede ser a nivel de


interfaz o de la capa de negocio. Si eliges esta segunda, recuerda
importarla dentro del archivo xaml de la ventana en la que estes
trabajando). A esta clase la llamaremos LargoMinimoRule y tendrá la
siguiente estructura:

www.iplacex.cl26
Imagen 25: Estructura de clase validadora LargoMinimoRule

Fuente: www.iplacex.cl

En esta clase existe una propiedad de int pública llamada


LargoMinimo, que servirá para especificar, a nivel XAML de la interfaz
de usuario, el largo mínimo que debe tener el nombre del producto
para poder ser aceptado como valor.

También, como se especificó anteriormente, se deberá incluir la


sobreescritura del método Validate(). En este método
transformaremos el value que viene como parámetro de entrada en un
string (este value corresponderá al texto que el usuario escribirá en el
textbox). Se evaluará si el texto ingresado es menor a LargoMinimo,
entonces se arroja una nueva instancia de ValidationResult, en donde
se especificarán como parámetros de entrada false y el mensaje de
error. Si no existe error alguno, entonces ValidationResult() tendrá true
y null como valores, ya que, se cumple con la validación y no es
necesario mostrar un mensaje.

www.iplacex.cl27
A nivel de interfaz, la implementación será la siguiente:

Imagen 26: Implementación de clase LargoMinimoRule a nivel de código


xaml

Fuente: www.iplacex.cl

Al igual que en el caso anterior, aquí también se implementa


ValidatesOnDataErrors. Si te fijas, la forma en que se realiza el Binding
de la propiedad Nombre se ve modificada a como se había visto hasta
ahora. Aquí, Path permite especificar la propiedad de clase a la que
estará vinculado el control.

Para poder aplicar la regla de validación, entonces se deberá utilizar


la etiqueta <Binding.ValidationRules>, en donde se especificará la
clase de validación y también se asignarán el o los valores de las props
de esta clase validadora.

www.iplacex.cl28
Imagen 27: Visualización de mensaje de error durante proceso de
validación con ValidationRule

Fuente: www.iplacex.cl

d. Data Annotations

Finalmente, otra forma de validar las propiedades de una clase es por


medio de Data Annotations. Estos son atributos que pueden ser
aplicados a las propiedades de una clase para especificar aspectos de
validación, si es que existen relaciones entre clases (comportamiento
similar al de las claves primarias y foráneas de las tablas de una base
de datos), describir como se debe mostrar los datos en la interfaz de
usuario, y también de mostrar mensajes preestablecidos en caso de
la existencia de errores.

Data Annotations es una librería que forma parte del sistema, por lo
que puede ser referenciada dentro del proyecto en donde esté
presente la clase modelo, en ese caso, el proyecto Negocio.

www.iplacex.cl29
Algunos Data Annotations son:

Clase Descripción Atributo


CompareAttribute compara valores [Compare]
entre propiedades
CreditCardAttribute valida si el valor [CreditCard]
tiene formato de
tarjeta de crédito
CustomValidationRule especifica un [CustomValidation]
método de
validación custom
DisplayFormatAttribute especifica el [DisplayFormat]
formato de salida
del campo
EmailAddressAttribute valida si tiene [EmailAddress]
formato de email
MaxLengthAttribute especifica el largo [MaxLength]
máximo de una
cadena de texto o
array
MinLengthAttribute especifica el largo [MinLength]
mínimo de una
cadena de texto o
array
PhoneAttribute valida si el campo [Phone]
posee formato de
número telefónico
RangeAttribute especifica un rango [Range(min, max)]
de números
RegularExpressionAttribute especifica una [RegularExpression]
expresión regular
que se debe
cumplir
RequiredAttribute especifica que la [Required]
propiedad es
obligatoria

www.iplacex.cl30
StringLengthAttribute especifica el largo [StringLength]
que debe tener una
propiedad

SABER MÁS

Estos son solo algunos de los atributos de Data Annotations que existen
en C#. Si quieres conocer todas las existentes, visita Data Annotations

La implementación de los Data Annotations, se realiza directamente en cada


una de las propiedades de la clase, en donde, cada atributo deberá ir en
corchetes independientes, como es mostrado en la siguiente imagen:

Imagen 28: Implementación de DataAnnotations y propiedad


ErrorMessage en propiedad de la clase

Fuente: www.iplacex.cl

www.iplacex.cl31
Para cada una de los Data Annotations de las propiedades de la clase
Producto mostrado anteriormente, existe un ErrorMessage. Este será una
cadena de texto que mostrará un mensaje de error que el mismo
desarrollador puede asignar.

Esta forma de validación será un ingrediente adicional dentro de los setter


de las propiedades de la clase modelo. Este es el método ValidateProperty()
para poder generar los distintos contextos de validación para cada una de
las propiedades.

Imagen 29: Método ValidateProperty en clase Producto

Fuente: www.iplacex.cl

Luego, estos mensajes serán mostrados de forma automática por el


template de error, arrojando el mensaje que corresponda según la falla
presentada en el ingreso de datos. Por ejemplo, en la propiedad Nombre de
la clase Producto, se especificó que el largo mínimo del nombre del producto
debe ser de 5 caracteres, y que el largo máximo debe ser de 100. Si se
ingresan solo tres caracteres, entonces se mostrará el mensaje
correspondiente que el nombre del producto es muy corto. Si se pasa de los
5 caracteres, entonces no se mostrará error alguno, a menos que se pase
de 100 caracteres, ya que de forma inmediata se mostrará el mensaje que
corresponda a dicho error.

www.iplacex.cl32
Imagen 30: Visualización de mensaje de error durante proceso de
validación con Data Annotations

Fuente: www.iplacex.cl

www.iplacex.cl33
5. Expresiones regulares

Dentro de las validaciones de los campos anteriormente vistos para Data


Annotations, surgió un atributo denominado RegularExpression o
expresiones regulares.

Si recuerdas, en el ejercicio de calculadora desarrollado en la unidad 1, se


solicitaba que solo se pudiesen ingresar números dentro del control textbox.

Por defecto, WPF no posee un control exclusivo para números, por lo que,
era necesario aplicar pasos adicionales si se deseaba que solo se puedan
ingresar números. Para lograr este cometido, se implementó dentro del
evento PreviewTextInput de dichos controles, una expresión regular que
validara que solo se podrían ingresar valores numéricos.

Esa expresión regular tenía la siguiente estructura:

[^0-9]+

En donde:
• [^0-9] representa si la coincidencia no se encuentra dentro del grupo
de caracteres, los cuales vendría a ser números que contengan los
dígitos desde el 0 al 9, entonces no debe poder escribirse en el
textbox.
• + representa la evaluación de los elementos previos una o siguientes
dentro del campo de texto

Las expresiones regulares son estructuras complejas. El caso anterior es un


ejemplo bastante simple y fácil de comprender. Pero existen otros que son
extremadamente complejos.

Por lo general, este tipo de estructuras serán utilizadas en la generación de


plantillas para validar cadenas de texto y que deban tener un cierto formato,
por ejemplo, el RUT de una persona o el número de vuelo.

www.iplacex.cl34
Algunas de las expresiones regulares más utilizadas son:

Expresión regular Descripción


^\d{1,2}\.\d{3}\.\d{3}[-][0-9kK]{1}$ valida el formato de
RUT chileno. La
verificación del dígito
verificador se debe
hacer a parte
/\D*([+56]\d[2-9])(\D)(\d{4})(\D)(\d{4})\D*/ valida formato de
teléfono celular chileno
/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/ valida formato de
email
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0- valida el formato de
9])(?=.*?[#?!@$%^&*-]).{8,}$ contraseñas
alfanuméricas

www.iplacex.cl35
Conclusión
Las validaciones son parte importante del desarrollo de una aplicación,
permitiendo verificar si los datos ingresados por el usuario corresponden y
cumplen a lo esperado por parte del cliente para ser guardados dentro de
una base de datos.

Para lograr esto, es posible aplicar diversos tipos de validaciones, los que
pueden actuar en conjunto o solo implementando un camino en concreto,
dependiendo de factores, como la facilidad de implementación,
conocimiento del desarrollador o de tecnologías adicionales que deban ser
integradas.

Gracias a la incorporación del DataBinding dentro del código también se ve


beneficiada la validación de campos, al actuar de forma asíncrona con los
distintas reglas de verificación, mostrando el o los mensajes de error
directamente en la interfaz de usuario, cosa de avisar al usuario si está
cometiendo algún error mientras introduce datos dentro de un formulario.

www.iplacex.cl36
Bibliografía
Data Binding overview (WPF .NET)
https://learn.microsoft.com/en-us/dotnet/desktop/wpf/data/?view=netdesktop-6.0

Data Annotations Attributes


https://learn.microsoft.com/en-
us/dotnet/api/system.componentmodel.dataannotations?view=net-6.0

Reflection
https://learn.microsoft.com/en-us/dotnet/csharp/programming-
guide/concepts/reflection

IDataErrorInfo
https://learn.microsoft.com/en-us/previous-
versions/windows/apps/743swcz7(v=vs.105)

ValidationRule Class
https://learn.microsoft.com/en-
us/dotnet/api/system.windows.controls.validationrule?view=windowsdeskto
p-6.0

ToolTip Overview
https://learn.microsoft.com/en-us/dotnet/desktop/wpf/controls/tooltip-
overview?view=netframeworkdesktop-4.8

Regular Expression Language


https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-
expression-language-quick-reference

www.iplacex.cl37
www.iplacex.cl38

También podría gustarte