绑定到double
可能会产生以下验证错误
价值......无法转换。
使用ExceptionValidationRule
时,错误更多是健谈:
输入字符串的格式不正确。
价值太大或太小了......
也许还有更多。添加那些我可以将自己投入绑定属性设置器的内容。
现在,我想本地化这些消息(最好是第二版)。这并不是什么大惊喜,但是sources没有透露任何有用的东西(我看错了地方吗?)。
我可以制定自己的验证规则,但也许有一种更简单的方法?
我的问题:我可以本地化ExceptionValidationRule
吗?
以下是mcve:
XAML:
<TextBox>
<TextBox.Text>
<Binding Path="TestDouble" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<!--<local:MyValidationRule />-->
<!--<ExceptionValidationRule />-->
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
<Validation.ErrorTemplate>
<ControlTemplate>
<TextBlock Margin="0,20,0,0" Foreground="Red" Text="{Binding ErrorContent}" />
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
CS:
public partial class MainWindow : Window
{
public double TestDouble { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
}
public class MyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo) => ValidationResult.ValidResult; // not used
public override ValidationResult Validate(object value, CultureInfo cultureInfo, BindingExpressionBase owner)
{
var bindingExpression = owner as BindingExpression;
if (bindingExpression != null)
{
var type = bindingExpression.ResolvedSource.GetType().GetProperty(bindingExpression.ResolvedSourcePropertyName).PropertyType;
if (type == typeof(double))
{
double result;
if (!double.TryParse((string)value, out result))
return new ValidationResult(false, "The value format is not recognized"); // custom message
}
... // and so on, for all types ?????
}
return base.Validate(value, cultureInfo, owner);
}
}
答案 0 :(得分:0)
要更新在更新绑定源期间出现的此类错误消息,它足以设置绑定的UpdateSourceExceptionFilter
回调处理程序,不需要自定义验证规则(ExceptionValidationRule
是必需的)。
XAML:
<Binding UpdateSourceExceptionFilter="ExeptionFilter" ...>
CS:
object ExeptionFilter(object bindingExpression, Exception exception)
{
return "Localized error message";
}
显然,可以switch
/ case
(在C#7中,早期 - if/else if
)提供特定于例外的消息(在我的问题中,这些消息是FormatException
和{相应地{1}}。