Hallo allerseits
ich habe ein DataGrid mit mehreren Spalten, die validiert werden wollen. Es sollen aber auch falsche Werte in das Binding der jeweiligen Spalten zurückgeschrieben werden. Also benutze ich
Der Validator sieht so aus:
Ich bekomm dabei immer den Fehler in Zeile 9:
Das Komische ist, bei dieser Spalte z.B. funktioniert es ohne Probleme:
Spoiler anzeigen
Google spuckt bei mir nur einen Treffer aus, bei stackoverflow, aber dort ist die Frage auch nicht beantwortet...
Jemand ne Idee was da los ist??
ich habe ein DataGrid mit mehreren Spalten, die validiert werden wollen. Es sollen aber auch falsche Werte in das Binding der jeweiligen Spalten zurückgeschrieben werden. Also benutze ich
ValidationStep="CommittedValue"
. Hier mal exemplarisch eine Spalte:XML-Quellcode
- <DataGridTextColumn Header="Interpret" Width="*" Visibility="{Binding Data.Sichtbarkeit, Source={StaticResource proxy}}" EditingElementStyle="{StaticResource txtNoEmptyString}">
- <DataGridTextColumn.ElementStyle>
- <Style TargetType="TextBlock">
- <Setter Property="VerticalAlignment" Value="Center" />
- </Style>
- </DataGridTextColumn.ElementStyle>
- <DataGridTextColumn.Binding>
- <Binding Path="Interpret" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
- <Binding.ValidationRules>
- <viewmodel:NoEmptyStringRule ValidatesOnTargetUpdated="True" ValidationStep="CommittedValue"/>
- </Binding.ValidationRules>
- </Binding>
- </DataGridTextColumn.Binding>
- </DataGridTextColumn>
Der Validator sieht so aus:
VB.NET-Quellcode
- Option Strict On
- Imports System.Windows.Controls
- Public Class NoEmptyStringRule
- Inherits ValidationRule
- Public Overrides Function Validate(value As Object, cultureInfo As Globalization.CultureInfo) As ValidationResult
- Dim Objekt As String = DirectCast(value, String)
- If String.IsNullOrEmpty(Objekt) Then
- Return New ValidationResult(False, "Dieses Feld darf nicht leer sein. Bitte fülle etwas ein.")
- Else
- Return ValidationResult.ValidResult
- End If
- End Function
- End Class
Ich bekomm dabei immer den Fehler in Zeile 9:
Das Objekt des Typs "System.Windows.Data.BindingExpression" kann nicht in Typ "System.String" umgewandelt werden.
Das Komische ist, bei dieser Spalte z.B. funktioniert es ohne Probleme:
XML-Quellcode
- <DataGridTextColumn Header="Track #" Width="65" EditingElementStyle="{StaticResource txtTrackNummer}" Visibility="{Binding Data.Sichtbarkeit, Source={StaticResource proxy}}">
- <DataGridTextColumn.ElementStyle>
- <Style TargetType="TextBlock">
- <Setter Property="VerticalAlignment" Value="Center" />
- </Style>
- </DataGridTextColumn.ElementStyle>
- <DataGridTextColumn.Binding>
- <Binding Path="Tracknummer" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
- <Binding.ValidationRules>
- <viewmodel:TrackNummerRule ValidatesOnTargetUpdated="True" ValidationStep="CommittedValue"/>
- </Binding.ValidationRules>
- </Binding>
- </DataGridTextColumn.Binding>
- </DataGridTextColumn>
VB.NET-Quellcode
- Public Class TrackNummerRule
- Inherits ValidationRule
- Private MainModule As Services.IZentraleKlasse = Services.ServiceContainer.GetService(Of Services.IZentraleKlasse)
- Public Overrides Function Validate(value As Object, cultureInfo As Globalization.CultureInfo) As ValidationResult
- Dim str As String = TryCast(MainModule.GetBoundValue(value), String)
- Dim TrackNr As Integer
- If Integer.TryParse(str, TrackNr) Then
- If (TrackNr > 0) And (TrackNr < 1000) Then
- Return ValidationResult.ValidResult
- End If
- End If
- Return New ValidationResult(False, "Ungültige Tracknummer. Bitte gebe einen Wert von 1-999 ein.")
- End Function
Google spuckt bei mir nur einen Treffer aus, bei stackoverflow, aber dort ist die Frage auch nicht beantwortet...
Jemand ne Idee was da los ist??
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()