2012-05-16 14 views
5

Busqué en Google durante aproximadamente 2 horas y no encontré nada.Metro de Windows 8: Implementación de la validación

Dado el siguiente escenario:

public class Person 
{ 
    [Required] 
    public string Name { get; set; } 
} 

XAML:

<TextBox Text="{Binding Name, Mode=TwoWay}" /> 

¿Qué haría para obtener automáticamente la reacción acerca de la validación de la interfaz de usuario como la que hay en MVC3?

(Ah, y realmente no me importa en este momento si iba a ser capaz de utilizar los DataAnnotations integrados como [requerido] o no)

Cualquier ayuda es muy apreciada!

Respuesta

13

He agregado algo al WinRT XAML Toolkit. Se llama TextBoxValidationExtensions y le permite definir la validación de esta manera:

<TextBox 
    Width="400" 
    HorizontalAlignment="Left" 
    xyzc:TextBoxValidationExtensions.Format="NonEmptyNumeric" 
    xyzc:TextBoxValidationExtensions.InvalidBrush="Red" 
    xyzc:TextBoxValidationExtensions.ValidBrush="Green" /> 

Los formatos están actualmente define como:

[Flags] 
public enum ValidTextBoxFormats 
{ 
    Any = 0, 
    NonEmpty = 1, 
    Numeric = 2, 
    NonEmptyNumeric = 3 
} 

El código completo es un poco demasiado tiempo para compartir aquí. Usted puede sacar el código de CodePlex y modificar a su gusto - añadir nuevas reglas de validación, modificar pinceles predeterminados etc.

+0

¡Parece que es el truco! De todos modos, ¿puedes explicarme cómo podría configurar esto en código en lugar de en XAML? – Shion

+0

Si está utilizando MVVM, entonces tendría algún tipo de modelo de vista para un campo, con propiedades de texto y formato, por lo que simplemente establecería el enlace como xyzc: TextBoxValidationExtensions.Format = "{Binding Format}". Si acaba de codificar, entonces llamaría TextBoxValidationExtensions.SetFormat (myTextBox, ValidTextBoxFormats.Numeric). –

+0

Otra solución fue descrita por Jerry Nixon en su blog [aquí - Let's Code! Manejo de la validación en su aplicación de la Tienda Windows] (http://blog.jerrynixon.com/2014/07/lets-code-handling-validation-in-your.html). –

0

sólo tiene que utilizar los eventos en el control particular XAML, como si en textbox uso pointerexited y escribir una función en el código detrás para realizar la validación requerida.

+0

Aunque la pregunta ya fue respondida: Su sugerencia daría lugar a un código muy duplicado y difícil de mantener. Filip Skakun ya ha respondido perfectamente (en la respuesta aceptada). :) – Shion

-1

Parece que, basándose en el soporte provisto en el marco, su extraordinaria idea de "Validar" un campo de texto es tan rara y poco común que no necesita ser considerada en absoluto. Todos sabemos que si lo que quería hacer era en general común o útil, habría alguna consideración para tal característica en un marco tan bien diseñado y completo.

+0

¿Por qué no sería necesario validar un cuadro de texto, por ejemplo, una URL, un número, un correo electrónico básico o cualquier otra cosa? Por supuesto, puede hacer la validación con un clic de un botón y agregar el estilo necesario al cuadro de texto, pero a veces eso no es lo que se necesita. Y también: el hecho de que no esté en el marco no significa que no sea deseado/necesario. – Shion

+0

@Shion encuentra un diccionario y busca la palabra 'sarcasmo' – HappyNomad

+0

Hay personas que quieren decir cosas como la respuesta anterior grave ... – Shion

Cuestiones relacionadas