Pergunta

Eu estou tentando usar validação no WPF. Eu criei um NotNullOrEmptyValidationRule como mostrado abaixo:

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); 
        }
    }

Agora, eu preciso usá-lo em meu aplicativo. No meu arquivo App.xaml I declarou o estilo para o TextBox. Aqui está a declaração.

 <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>

Agora, eu quero usá-lo em minha caixa de texto, por isso estou usando o seguinte código:

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


            </TextBox>

O erro vem na NotNullOrEmptyValidationRule Tag. O verificador de sintaxe XAML não é capaz de resolver o NotNullOrEmptyValidationRule. Eu até tentei colocar o namespace mas não parece trabalho.

Foi útil?

Solução

i ver a sua ligação na caixa de texto está definido para um caminho de 'Texto' - é que um campo em qualquer que seja o datacontext desta caixa de texto é? é a caixa de texto realmente recebendo um valor colocar nele? Também, se você colocar um ponto de interrupção em seu método de validação, é que alguma vez ser demitido?

Você pode querer pesquisar como falhas login ligação e rever as também ..

Outras dicas

Você só precisa adicionar os xmlns à sua janela, e usar isso para fazer referência a seu ValidationRule.

Em WPF, o objeto é perfeitamente bem para ser usado a partir do mesmo conjunto.

Uma vez que a sua regra não é definido no namespace XAML padrão, você tem que criar um mapeamento para o seu namespace clr assim:

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

E então você iria utilizá-lo assim:

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

Editar Eu adicionei uma declaração Caminho para a vinculação. Você tem que dizer o Binding o que se ligam a:)

Você não tem essa linha em seu código por trás

Public Sub New()

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

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

Há um bug no Visual Studio e Expression Blend que causa esse problema. O que você precisa fazer é se certificar de que a regra de validação é em um projeto separado / montagem que você pode fazer referência. Isto deve resolver o problema.

No entanto, você terá que adicionar de volta o espaço de nomes em ordem para que ele funcione.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top