gpt4 book ai didi

c# - 错误消息仅显示错误消息中的第一个字符。 INotifyDataErrorInfo WPF

转载 作者:行者123 更新时间:2023-11-30 21:42:09 25 4
gpt4 key购买 nike

当 TextBox 为空时,我有一个简单的验证来显示错误消息。问题在于消息仅显示消息的第一个 字母。

enter image description here

在文本框样式中:

<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding Path=(Validation.Errors)[0].ErrorContent, RelativeSource={x:Static RelativeSource.Self}}" />
</Trigger>

如果我将错误消息直接设置为 Setter 值,它会毫无问题地显示所有错误消息。

<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();
}
}

最佳答案

你的 GetErrors方法应返回 IEnumerable<string>而不是 IEnumerable<char> :

public IEnumerable GetErrors(string propertyName)
{
string errorsForName;
lock (_lock)
{
errorsForName = _errors.FirstOrDefault(e => e.Key == propertyName).Value;//.TryGetValue(propertyName, out errorsForName);
}
return new List<string> { errorsForName };
}

关于c# - 错误消息仅显示错误消息中的第一个字符。 INotifyDataErrorInfo WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42789525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com