Verwenden der Validierung in WPF mit Abhängigkeitseigenschaft und Stilauslösern

Ich versuche, Validierung in wpf zu verwenden. Ich habe eine NotNullOrEmptyValidationRule wie folgt erstellt:

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

Jetzt muss ich es in meiner Anwendung verwenden. In meiner App.xaml-Datei habe ich den Style für die TextBox deklariert. Hier ist die Erklärung.

 
        

Nun möchte ich es auf meinem TextBox verwenden, also verwende ich den folgenden Code:

  
                
                    
                        
                            
                        
                    
                


            

Der Fehler tritt auf dem Tag NotNullOrEmptyValidationRule auf. Der XAML-Syntax-Checker kann die NotNullOrEmptyValidationRule nicht auflösen. Ich habe sogar versucht, den Namensraum zu setzen, aber es scheint nicht zu funktionieren.

0
hinzugefügt bearbeitet
Ansichten: 2

4 Antworten

Es gibt einen Fehler in Visual Studio und Expression Blend, der dieses Problem verursacht. Sie müssen sicherstellen, dass sich die Validierungsregel in einem separaten Projekt/Assembly befindet, auf das Sie verweisen können. Dies sollte das Problem beheben.

Sie müssen jedoch den Namespace hinzufügen, damit er funktioniert.

0
hinzugefügt

Sie müssen lediglich die xmlns zu Ihrem Fenster hinzufügen und damit Ihre ValidationRule referenzieren.

In wpf ist das Objekt vollkommen in Ordnung, um von derselben Baugruppe verwendet zu werden.

Da Ihre Regel nicht im Standard-XAML-Namespace definiert ist, müssen Sie wie folgt eine Zuordnung zu Ihrem Clr-Namespace erstellen:


Und dann würdest du es so benutzen:


    
        
    

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

0
hinzugefügt

Ich sehe Ihre Bindung an die TextBox ist auf einen Pfad von 'Text' gesetzt - ist das ein Feld auf was auch immer der Datenkontext dieser Textbox ist? Wird der Textkasten tatsächlich einen Wert bekommen? Wenn Sie in Ihrer Validierungsmethode einen Haltepunkt setzen, wird dieser dann ausgelöst?

Vielleicht möchten Sie nachschlagen, wie Sie Fehler bei der Bindung protokollieren und diese auch überprüfen können.

0
hinzugefügt

Sie haben diese Zeile in Ihrem Code nicht hinter sich

Public Sub New()

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

    Me.**NameOfTextBox**.DataContext = Me
End Sub
0
hinzugefügt