Ich bin neu in WPF, derzeit Validation lernen. In meinem einfachen Beispiel habe ich diese Modellklasse:ValidatesOnExceptions Konflikte mit ValidatesOnDataErrors
class Book
{
public int Id
{
get { return id; }
set
{
if (id == value) return;
id = value;
OnPropertyChanged(nameof(Id));
}
}
public string Title
{
get { return title; }
set
{
if (title == value) return;
title = value;
OnPropertyChanged(nameof(Title));
OnPropertyChanged(nameof(PagesCount));
}
}
public int PagesCount
{
get { return pagesCount; }
set
{
if (pagesCount == value) return;
pagesCount = value;
OnPropertyChanged(nameof(Title));
OnPropertyChanged(nameof(PagesCount));
}
}
public string Color
{
get { return color; }
set
{
if (color == value) return;
color = value;
OnPropertyChanged(nameof(Color));
}
}
}
I IDataErorInfo
und INotifyDataErorInfo
umgesetzt. einer meiner Validierungsregeln (zum Testen Sake Autor) ist, dass der Benutzer nicht beide SS
in Titel und 33
in PagesCount eingeben kann, so fügte ich dies in den INotifyDataErrorInfo
‚s Indexer:
case nameof(Title):
if (Title == "N")
{
AddError(nameof(Title), "Annoying");
hasError = true;
}
if (Title == "SS" && PagesCount == 33)
{
AddError(nameof(Title), "SS and 33 not compatible");
hasError = true;
}
if (!hasError)
ClearErrors(nameof(Title));
break;
case nameof(PagesCount):
if (Title == "SS" && PagesCount == 33)
{
AddError(nameof(Title), "SS and 33 not compatible");
hasError = true;
}
if (!hasError)
ClearErrors(nameof(Title));
break;
Als ich eingeben diese Werte (SS für Titel und 33 für PagesCount) die rote Umrandung angezeigt, und die Fehlermeldung zeigen in dieser Vorlage:
<ListBox Grid.Row="8" Grid.ColumnSpan="2" ItemsSource="{Binding ElementName=mGrd, Path=(Validation.Errors)}">
<ListBox.ItemTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
aber wenn ich geben Sie einen ungültigen Wert für die PagesCount (ungültige int
) wie 33e t Die Fehlermeldung verschwindet nicht aus der ListBox, und der Rahmen schmückt weiterhin beide Textfelder. Ich weiß nicht, warum es nicht die Fehlermeldung aus der Fehlervorlage löscht und nur den roten Rahmen behält, also gibt es eine Möglichkeit, dies zu tun, und kann ich auch Nachricht für solche Ausnahmen anzeigen (Eingabe 33e für int
Feld)
Warum verschwindet der Rahmen, wenn Sie einen * ungültigen * Wert eingeben? – mm8