Laden...

Einfache Validation Rule funktioniert nicht

Erstellt von hypersurf vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.062 Views
H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 13 Jahren
Einfache Validation Rule funktioniert nicht

Hi Leute,

irgendwie blicke ich durch's Binding noch nicht ganz durch und finde auch nach 2 Std. googlen keine Lösung.

Ich möchte eine simple Validierung implementieren. Die Textfelder dürfen nicht leer sein. D. h. verlässt der User das Textfeld soll ein entsprechendes Controltemplate mit Tooltip angezeigt werden.


        <ControlTemplate x:Key="TextBoxErrorTemplate">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition Width="2"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                
                <Border Grid.Column="0" BorderThickness="2" BorderBrush="Red">
                    <AdornedElementPlaceholder Name="Adorner1"/>
                </Border>
                <Image Source="Images/cancel.png" Height="16" Width="16" 
                       Grid.Column="2" 
                       ToolTip="{Binding ElementName=Adorner1, 
                                 Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
            </Grid>
        </ControlTemplate>


    public class VR_Pflichtfeld : ValidationRule
    {
        private string _errorMessage;
        public string ErrorMessage
        {
          get { return _errorMessage; }
          set { _errorMessage = value; }
        }

        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            if (value != null && value is string)
            {
                if (((string)value).Length == 0)
                {
                    return new ValidationResult(false, _errorMessage);
                }
                else
                {
                    return new ValidationResult(true, null);
                }
            }
            return new ValidationResult(true, null);
        }
    }


                    <TextBox Grid.Column="3" Grid.Row="0" Height="20" 
                             x:Name="txtDatenbankname" GotFocus="txtDatenbankname_GotFocus"
                             Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}">

                        <TextBox.Text>
                            <Binding Path="txtDatenbankname" UpdateSourceTrigger="LostFocus">
                                <Binding.ValidationRules>
                                    <local:VR_Pflichtfeld ErrorMessage="Bitte geben Sie eine Datenbank an!"/>
                                </Binding.ValidationRules>
                            </Binding>
                        </TextBox.Text>
                    </TextBox>

Ich vermute, dass das nur am Binding liegt, sehe aber den Wald vor lauter Bäumen nicht mehr. Habe schon 47 Varianten versucht 🙁

6.911 Beiträge seit 2009
vor 13 Jahren

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo hypersurf,

ich kann dir diesen Artikel empfehlen. Siehe auch [Artikel] INotifyPropertyChanged implementieren und [Artikel] Implementierung von IDataErrorInfo.

zero_x

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 13 Jahren

Danke für Eure Antworten 🙂

Bitte beachte auch
>
Punkt 4.c

4c. Wälzt nicht eure Aufgaben auf uns ab

Wundert euch nicht, wenn es zum Teil sehr heftige Gegenreaktionen gibt, falls ihr doch nach fertigen Lösungen fragt oder anderweitig der Eindruck entsteht, dass ihr uns kostenlos für eure Aufgaben einspannen wollt.

Wie soll ich das denn bitte verstehen? Darf ich eine einfache Frage zu der ich selber nach stundenlangem probieren und googlen keine Lösung gefunden habe hier nicht stellen?

Meine Hoffnung war, dass jemand den Code sieht und ihm evtl. direkt auffällt was falsch ist. Ich hab' nicht verlangt dass das irgendwer nach programmiert und versucht in stundenlanger Arbeit mein Problem zu lösen....

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo hypersurf,

warum 4.c?

Sicher darfst du Fragen stellen 😉

Der Hinweis (und nicht die Ermahnung oder wie du es vllt. verstanden haben willst) kommt daher dass du schreibst

irgendwie blicke ich durch's Binding noch nicht ganz durch und finde...keine Lösung.

dass dir bei diesem Thema noch ein die Grundlagen fehlen - ist ja in Ordnung. Dann postest du Code und schreibst aber nicht was das Problem ist bzw. "funktioniert nicht" aus dem Titel ist schon sehr allgemein und das kann Vieles sein. Somit wälzt du ja gerade die Aufgabe ab dass sich jemand durch deinen Code denken muss und Fehler finden soll. Bei genauerer Angabe was nicht funktionieren will könnte gezielt und einfacher gescuht werden. "Hier mein Code, findet den Fehler" geht nicht.

Wie auch schon eingangs erwähnt ist dass ein Hinweis und nicht mehr.
Ich hoffe du verstehst was ich meine denn ich verstehe auch was du meinst 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 13 Jahren

Okay, kapiert 😉

Das mir die Grundlagen fehlen stimmt im übrigen nicht, ich wollte damit nur ausdrücken dass ich nach x-Stunden Fehlersuche nicht mehr richtig durchblicke. Naja, genaue Formulierung ftw 😉