TextBox가 비어있을 때 오류 메시지를 표시하는 간단한 유효성 검사가 있습니다. 문제는 메시지의 첫 번째 문자 만 표시한다는 것입니다. 텍스트 상자의 스타일에서 오류 메시지는 오류 메시지의 첫 번째 문자 만 표시합니다. INotifyDataErrorInfo WPF
: 나는 세터 값에 직접 오류 메시지를 설정하면<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding Path=(Validation.Errors)[0].ErrorContent, RelativeSource={x:Static RelativeSource.Self}}" />
</Trigger>
, 어떤 문제없이 모두 보여줍니다.
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="This field is required!" />
</Trigger>
XAML 코드 :
<TextBox Text="{Binding Name, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnNotifyDataErrors=True,
NotifyOnValidationError=True}" />
C# 코드는
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();
}
}
INotifyDataErrorInfo를 사용 중입니다. 문자열이 올바른 값을 반환하고 메시지의 첫 번째 문자가 변경되어 툴팁에서 적절히 변경되었습니다. 나는 C# 코드를 포함하도록 질문을 업데이트했다. – IBRA