gpt4 book ai didi

wpf - 如何处理值转换器中的异常,以便显示自定义错误消息

转载 作者:行者123 更新时间:2023-12-03 14:53:46 24 4
gpt4 key购买 nike

我有一个文本框,它绑定(bind)到具有 Timespan 类型属性的类,并编写了一个值转换器来将字符串转换为 TimeSpan。

如果在文本框中输入了非数字,我希望显示自定义错误消息(而不是默认的“输入字符串格式错误”)。

转换器代码为:

    public object ConvertBack(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
try
{
int minutes = System.Convert.ToInt32(value);
return new TimeSpan(0, minutes, 0);
}
catch
{
throw new FormatException("Please enter a number");
}
}

我在 XAML 绑定(bind)中设置了“ValidatesOnExceptions=True”。

但是,我遇到了以下 MSDN 文章,它解释了为什么上述方法不起作用:

“数据绑定(bind)引擎不会捕获用户提供的转换器引发的异常。任何由 Convert 方法引发的异常,或由 Convert 方法调用的方法引发的任何未捕获的异常,都被视为运行时错误”

我已经读到'ValidatesOnExceptions 确实在 TypeConverters 中捕获了异常,所以我的具体问题是:
  • 你什么时候会在 ValueConverter 上使用 TypeConverter
  • 假设 TypeConverter 不是上述问题的答案,我如何在 UI
  • 中显示我的自定义错误消息

    最佳答案

    我会使用 ValidationRule 为此,转换器可以确保转换工作正常,因为只有在验证成功时才会调用它,并且您可以使用附加属性 Validation.Errors 其中将包含您的 ValidationRule 的错误如果输入不是您想要的方式,则创建。

    例如(注意工具提示绑定(bind))

    <TextBox>
    <TextBox.Style>
    <Style TargetType="{x:Type TextBox}">
    <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="True">
    <Setter Property="Background" Value="Pink"/>
    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
    </Trigger>
    </Style.Triggers>
    </Style>
    </TextBox.Style>
    <TextBox.Text>
    <Binding Path="Uri">
    <Binding.ValidationRules>
    <vr:UriValidationRule />
    </Binding.ValidationRules>
    <Binding.Converter>
    <vc:UriToStringConverter />
    </Binding.Converter>
    </Binding>
    </TextBox.Text>
    </TextBox>

    screenshot

    关于wpf - 如何处理值转换器中的异常,以便显示自定义错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6123880/

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