Frage

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

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

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

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

Jetzt will ich es auf meinem TextBox verwenden, so verwende ich den folgenden Code:

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


            </TextBox>

Der Fehler kommt auf den Tag NotNullOrEmptyValidationRule. Die XAML Syntaxprüfung ist nicht in der Lage, die NotNullOrEmptyValidationRule zu lösen. Ich habe sogar versucht, den Namensraum setzen, aber es scheint nicht zu funktionieren.

War es hilfreich?

Lösung

ich Ihr sehen auf der TextBox Bindung an einen Pfad von ‚Text‘ gesetzt ist - ist, dass ein Feld auf, was die Datacontext dieser Textbox ist? tatsächlich wird die Textbox Wert setzen in sie zu bekommen? auch, wenn Sie einen Haltepunkt in Ihrer Validierungsmethode setzen, ist, dass je gefeuert?

Sie möchten nachzuschlagen, wie Fehler zu melden Sie sich an Bindung und diese ebenfalls überprüfen ..

Andere Tipps

Sie müssen nur die xmlns zu Ihrem Fenster hinzuzufügen, und verwenden Sie, dass Ihr ValidationRule zu verweisen.

In WPF, das Objekt ist völlig in Ordnung, von der gleichen Baugruppe verwendet werden.

Da die Regel nicht in dem Standard-XAML-Namespace definiert ist, müssen Sie eine Zuordnung zu Ihrem CLR-Namespace erstellen wie folgt:

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

Und dann würden Sie es wie so verwenden:

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

Bearbeiten Ich habe eine Pfadanweisung auf die Bindung. Man muss sagen, die Bindung, was zu binden:)

Sie haben nicht diese Zeile im Code hinter

Public Sub New()

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

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

Es ist ein Fehler in Visual Studio und Expression Blend, das dieses Problem verursacht. Was Sie tun müssen, ist sicher, dass die Validierung der Regel in einem separat Projekt / Montage ist auf die Sie verweisen können. Dies sollte das Problem lösen.

Allerdings werden Sie haben den Namensraum zu geben, um wieder für sie zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top