Ich habe eine einfache Überprüfung, um eine Fehlermeldung anzuzeigen, wenn eine TextBox leer ist. Das Problem ist mit der Nachricht, die nur den ersten Brief der Nachricht anzeigt.Fehlermeldung zeigt nur das erste Zeichen der Fehlermeldung an. INotifyDataErrorInfo WPF
in der Textbox Stil:
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding Path=(Validation.Errors)[0].ErrorContent, RelativeSource={x:Static RelativeSource.Self}}" />
</Trigger>
Wenn ich die Fehlermeldung direkt an den Setter Wert gesetzt wird, zeigt es alle es ohne Probleme.
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="This field is required!" />
</Trigger>
XAML-Code:
<TextBox Text="{Binding Name, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnNotifyDataErrors=True,
NotifyOnValidationError=True}" />
C# -Code
private readonly Dictionary<string, string> _errors = new Dictionary<string, string>();
private readonly object _lock = new object();
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
public IEnumerable GetErrors(string propertyName)
{
string errorsForName;
lock (_lock)
{
errorsForName = _errors.FirstOrDefault(e => e.Key == propertyName).Value;//.TryGetValue(propertyName, out errorsForName);
}
return errorsForName;
}
public bool HasErrors
{
get { return _errors.Values.FirstOrDefault(l => !String.IsNullOrEmpty(l)) != null; }
}
private void RaiseErrorsChanged(string propertyName)
{
EventHandler<DataErrorsChangedEventArgs> handler = ErrorsChanged;
if (handler == null) return;
var arg = new DataErrorsChangedEventArgs(propertyName);
handler.Invoke(this, arg);
}
private void RequiredValidation(string propertyName, string value)
{
lock (_lock)
{
if (String.IsNullOrWhiteSpace(value))
{
_errors[propertyName] = "The name can't be null or empty.";
}
else
{
if (_errors.ContainsKey(propertyName)) { _errors.Remove(propertyName); }
}
RaiseErrorsChanged(propertyName);
SaveCommand.RaiseCanExecuteChanged();
}
}
Ich verwende INotifyDataErrorInfo, und die Zeichenfolge gibt den richtigen Wert zurück, und ich habe den ersten Buchstaben der Nachricht geändert und es in der QuickInfo entsprechend geändert. Ich habe die Frage aktualisiert, um den C# -Code einzubeziehen – IBRA