Usando a validação no WPF com acionadores de propriedade e estilo de dependência

Eu estou tentando usar a 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, preciso usá-lo no meu aplicativo. No meu arquivo App.xaml eu declarei o estilo para o TextBox. Aqui está a declaração.

 
        

Agora, eu quero usá-lo no meu TextBox, então estou usando o seguinte código:

  
                
                    
                        
                            
                        
                    
                


            

O erro vem no Tag NotNullOrEmptyValidationRule. O verificador de sintaxe XAML não é capaz de resolver o NotNullOrEmptyValidationRule. Eu até tentei colocar o namespace, mas parece que não funciona.

0
adicionado editado
Visualizações: 1

4 Respostas

Há um bug no Visual Studio e no Expression Blend que causa esse problema. O que você precisa fazer é certificar-se de que a regra de validação esteja em um projeto/conjunto separado que você possa referenciar. Isso deve resolver o problema.

No entanto, você terá que adicionar de volta o namespace para que ele funcione.

0
adicionado

Você só precisa adicionar o xmlns à sua janela e usá-lo para fazer referência à sua ValidationRule.

No WPF, o objeto está perfeitamente bem para ser usado a partir do mesmo conjunto.

Como sua regra não está definida no namespace XAML padrão, você deve criar um mapeamento para o namespace clr da seguinte forma:


E então você usaria assim:


    
        
    

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

0
adicionado

Eu vejo a sua ligação no TextBox está definido para um caminho de 'Texto' - é que um campo em qualquer datacontext desta caixa de texto é? a caixa de texto está realmente colocando um valor nela? Além disso, se você colocar um ponto de interrupção no seu método de validação, será que algum dia será demitido?

você pode querer pesquisar como registrar falhas na vinculação e revisá-las também.

0
adicionado

Você não tem essa linha no 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
0
adicionado