Utilizarea validării în WPF cu declanșarea proprietăților și a stilului de dependență

Încerc să folosesc Validarea în WPF. Am creat un NotNullOrEmptyValidationRule după cum se arată mai jos:

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

Acum, trebuie să o folosesc în cererea mea. În fișierul App.xaml, am declarat Stilul pentru TextBox. Iată declarația.

 

Acum, vreau să-l folosesc pe TextBox-ul meu, deci folosesc următorul cod:

  
                
                    
                        
                            
                        
                    
                


            

Eroarea apare pe eticheta NotNullOrEmptyValidationRule. Verificarea sintaxei XAML nu poate rezolva NotNullOrEmptyValidationRule. Am încercat chiar să pun spațiul de nume, dar nu pare să funcționeze.

0

4 răspunsuri

Există o eroare în Visual Studio și Expression Blend care provoacă această problemă. Ce trebuie să faceți este să vă asigurați că regula Validarea se află într-un proiect/ansamblu separat pe care îl puteți referi. Acest lucru ar trebui să rezolve problema.

Cu toate acestea, va trebui să adăugați spațiul de nume înapoi pentru ca acesta să funcționeze.

0
adăugat

Trebuie doar să adăugați xmlns în fereastra dvs. și să o utilizați pentru a vă referi la ValidationRule.

În WPF, obiectul este foarte bine să fie utilizat de la același ansamblu.

Deoarece regula dvs. nu este definită în spațiul de nume standard al XAML, trebuie să creați o mapare în spațiul de nume clr cum ar fi:


Și apoi o veți folosi așa:


    
        
    

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

0
adăugat

văd că legarea dvs. pe TextBox este setată la o cale de "Text" - este că un câmp pe orice datacontext al acestui textbox este? este caseta de text, de fapt, obține o valoare pusă în ea? De asemenea, dacă puneți o pauză în metoda dvs. de validare, este că vreodată ați fost concediat?

poate doriți să căutați cum să înregistrați eșecurile în legare și să le revizuiți și pe cele ..

0
adăugat

Nu aveți această linie în codul ur în spatele dvs.

Public Sub New()

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

    Me.**NameOfTextBox**.DataContext = Me
End Sub
0
adăugat