You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中Grid内TextBox未触发验证错误高亮问题排查

WPF Grid内TextBox未触发INotifyDataErrorInfo错误高亮的问题解决

我最近在开发一个基于.NET 4.7的WPF应用时遇到了个棘手的小问题:我写的UserControl里有个包含两个TextBox的Grid,XAML代码如下:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <TextBlock Grid.Column="0" Grid.Row="0" Text="Application ID" />
    <TextBox Grid.Column="1" Grid.Row="0" Text="{Binding AzureAppID}"/>
    <TextBlock Grid.Column="0" Grid.Row="1" Text="Vault URL" />
    <TextBox Grid.Column="1" Grid.Row="1" Text="{Binding AzureVaultUrl}" />
</Grid>

我已经通过INotifyDataErrorInfo接口实现了验证逻辑,比如要求AzureAppID不能为空。但当输入无效值时,奇怪的事情发生了:整个Grid会显示红色边框提示错误,可TextBox本身却完全没反应——不像我其他控件(比如DataGrid里的TextBox)那样会高亮标记错误。

折腾了好一阵才揪出问题根源:验证逻辑中标记错误的字段名称和绑定的属性名称存在细微差异,导致WPF引擎没法把错误和对应的TextBox匹配上。

举个实际的例子,可能我在验证逻辑里把字段写成了azureAppID(小写开头),但ViewModel里的属性是AzureAppID(大写开头);或是拼写时多打了一个字母、少了个下划线。WPF在匹配INotifyDataErrorInfo的错误时,是严格按照属性名称的字符串精准匹配的,哪怕只是大小写不同,都会导致错误无法关联到目标TextBox,反而让父容器Grid触发了错误提示。

解决起来很简单:只需要确保验证逻辑中传递的字段名称,和ViewModel里的绑定属性名称完全一致(包括大小写、拼写、符号),WPF就能正确把错误标记到对应的TextBox上了。

内容的提问来源于stack exchange,提问作者user4266661

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:42:43