Pregunta

Estoy intentando utilizar la 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 declaré el estilo para TextBox.Aquí está la declaración.

 <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">

            <Setter Property="Background" Value="Green"/>

            <Style.Triggers>

                <Trigger Property="Validation.HasError" Value="True">

                    <Setter Property="Background" Value="Red"/>
                    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"/>

                </Trigger>

            </Style.Triggers>

        </Style>

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

  <TextBox Style="{StaticResource textBoxStyle}">
                <TextBox.Text>
                    <Binding>
                        <Binding.ValidationRules>
                            <NotNullOrEmptyValidationRule />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>


            </TextBox>

El error aparece en la etiqueta NotNullOrEmptyValidationRule.El comprobador de sintaxis XAML no puede resolver NotNullOrEmptyValidationRule.Incluso intenté poner el espacio de nombres pero parece que no funciona.

¿Fue útil?

Solución

Veo que su enlace en el cuadro de texto está configurado en una ruta de 'Texto'. ¿Es ese un campo en cualquier contexto de datos de este cuadro de texto?¿Se le está asignando realmente un valor al cuadro de texto?Además, si coloca un punto de interrupción en su método de validación, ¿alguna vez lo despedirán?

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

Otros consejos

Solo necesita agregar el xmlns a su ventana y usarlo para hacer referencia a su ValidationRule.

En WPF, el objeto está perfectamente bien para usarse desde el mismo ensamblaje.

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:

<Window ...
    xmlns:local="clr-namespace:MyNamespaceName">

Y luego lo usarías así:

<Binding Path=".">
    <Binding.ValidationRules>
        <local:NotNullOrEmptyValidationRule />
    </Binding.ValidationRules>
</Binding>

EditarAgregué una declaración de ruta al enlace.Tienes que decirle al Binding a qué vincularse :)

No tienes esta línea en tu código detrás

Public Sub New()

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

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

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 esté en un proyecto/ensamblado separado al que pueda hacer referencia.Esto deberia resolver el problema.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top