Hallo Forum,
Ich bin gerade dabei mit in das Thema WPF zu stürzen und habe derzeit ein Problem mit der Validierung von WPF.
Das Programm (ein simples Haushaltsbuch zum üben) hat eine SQL Express Datenbank die Datasets sind im Studio angelegt und die Datenbindungen definiert mein Problem ist das die Validierung nicht funktioniert
ich habe zum Beispiel das Feld "Buchung" das auf das Datenfeld "amount" gebunden ist:
Hier noch die eingebundenen Ressourcen:
Meine Validierungsrule:
Es passiert nun folgendes:
Programm startet => Form öffnen => es erfolgt sofort der zugriff auf die Validationrule Klasse und das Textfeld wird rot umrahmt da es ja beim init leer ist.
Gebe ich jetzt allerdings eine korrekte zahl ein in diesem Fall z.b. 1000 und gehe aus dem Feld wird nicht nochmal validiert.
Ich habe versucht im "LostFocus" Event die Validierung anzustoßen:
Das funktioniert aber auch nicht vielleicht kann mir jemand einen Hinweis geben was ich falsch mache.
danke!
Ich bin gerade dabei mit in das Thema WPF zu stürzen und habe derzeit ein Problem mit der Validierung von WPF.
Das Programm (ein simples Haushaltsbuch zum üben) hat eine SQL Express Datenbank die Datasets sind im Studio angelegt und die Datenbindungen definiert mein Problem ist das die Validierung nicht funktioniert
ich habe zum Beispiel das Feld "Buchung" das auf das Datenfeld "amount" gebunden ist:
XML-Quellcode
- <TextBox x:Name="AmountTextBox" Grid.Column="1" Height="25" Width="235" Grid.Row="2" PreviewTextInput="AmountTextBox_TextInput" VerticalAlignment="Center" TabIndex="30">
- <TextBox.Text>
- <Binding x:Name="bin_amount" Path="amount" Mode="OneWayToSource" UpdateSourceTrigger="PropertyChanged">
- <Binding.ValidationRules>
- <local:buchung_valrules/>
- </Binding.ValidationRules>
- </Binding>
- </TextBox.Text>
- </TextBox>
Hier noch die eingebundenen Ressourcen:
XML-Quellcode
- <Window.Resources>
- <ResourceDictionary>
- <ResourceDictionary.MergedDictionaries>
- <ResourceDictionary Source="/slider_dict.xaml"/>
- </ResourceDictionary.MergedDictionaries>
- <local:ds_buchungen x:Key="Ds_buchungen"/>
- <CollectionViewSource x:Key="Tbl_transactionsViewSource" Source="{Binding tbl_transactions, Source={StaticResource Ds_buchungen}}"/>
- <CollectionViewSource x:Key="Tbl_konto_v01ViewSource2" Source="{Binding tbl_konto_v01, Source={StaticResource Ds_buchungen}}"/>
- <CollectionViewSource x:Key="aktive_konten" Source="{Binding tbl_konto_v01, Source={StaticResource Ds_buchungen}}"/>
- <CollectionViewSource x:Key="aktive_empfaenger" Source="{Binding tbl_receiver, Source={StaticResource Ds_buchungen}}"/>
- </ResourceDictionary>
- </Window.Resources>
Meine Validierungsrule:
VB.NET-Quellcode
- Imports System.Collections.Generic
- Imports System.Globalization
- Imports System.Linq
- Imports System.Text
- Imports System.Windows.Controls
- Public Class buchung_valrules
- Inherits ValidationRule
- Public Overloads Overrides Function Validate(value As Object, cultureInfo As CultureInfo) As ValidationResult
- 'Betrag darf nicht leer und negativ sein:
- Dim v_betrag As Decimal
- If Decimal.TryParse(value.ToString(), v_betrag) Then
- If v_betrag < 0 Then
- Return New ValidationResult(False, "Betrag darf nicht negativ sein")
- Else
- Return ValidationResult.ValidResult
- End If
- Else
- Return New ValidationResult(False, "Kein oder fehlender Betrag")
- End If
- Return ValidationResult.ValidResult
- End Function
- End Class
Es passiert nun folgendes:
Programm startet => Form öffnen => es erfolgt sofort der zugriff auf die Validationrule Klasse und das Textfeld wird rot umrahmt da es ja beim init leer ist.
Gebe ich jetzt allerdings eine korrekte zahl ein in diesem Fall z.b. 1000 und gehe aus dem Feld wird nicht nochmal validiert.
Ich habe versucht im "LostFocus" Event die Validierung anzustoßen:
Das funktioniert aber auch nicht vielleicht kann mir jemand einen Hinweis geben was ich falsch mache.
danke!
mfG.
Stephan
Stephan