Usar validación en WPF con propiedad de dependencia y activadores de estilo

Estoy tratando de usar Validación en WPF. Creé una NotNullOrEmptyValidationRule como se muestra a continuación:

public class NotNullOrEmptyValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            if (String.IsNullOrEmpty(value as String))
                return new ValidationResult(false, "Value cannot be null or empty");

            return new ValidationResult(true, null); 
        }
    }

Ahora, necesito usarlo en mi aplicación. En mi archivo App.xaml, declare el Estilo para el TextBox. Aquí está la declaración.

 
        

Ahora, quiero usarlo en mi TextBox, así que estoy usando el siguiente código:

  
                
                    
                        
                            
                        
                    
                


            

El error aparece en Tag NotNullOrEmptyValidationRule. El corrector de sintaxis XAML no puede resolver el NotNullOrEmptyValidationRule. Incluso he intentado poner el espacio de nombres, pero parece que no funciona.

0
agregado editado
Puntos de vista: 1

4 Respuestas

Hay un error en Visual Studio y Expression Blend que causa este problema. Lo que debe hacer es asegurarse de que la regla de Validación se encuentre en un proyecto/ensamblaje por separado al que pueda hacer referencia. Esto deberia resolver el problema.

Sin embargo, tendrá que volver a agregar el espacio de nombres para que funcione.

0
agregado

Solo necesita agregar los xmlns a su Ventana, y usar eso para hacer referencia a su ValidationRule.

En WPF, el objeto está perfectamente bien para ser utilizado desde el mismo conjunto.

Dado que su regla no está definida en el espacio de nombres XAML estándar, debe crear una asignación a su espacio de nombres clr de la siguiente manera:


Y luego lo usarías así:


    
        
    

Edit I added a Path statement to the Binding. You have to tell the Binding what to bind to :)

0
agregado

veo que su encuadernación en el TextBox se establece en una ruta de 'Texto' - ¿es un campo en cualquier contexto de datos de este cuadro de texto? ¿El cuadro de texto realmente está obteniendo un valor puesto? Además, si pones un punto de interrupción en tu método de validación, ¿alguna vez te despiden?

Es posible que desee buscar cómo registrar fallas en el enlace y revisarlas también.

0
agregado

Usted no tiene esta línea en nuestro código detrás

Public Sub New()

    ' This call is required by the Windows Form Designer.
    InitializeComponent()

    Me.**NameOfTextBox**.DataContext = Me
End Sub
0
agregado