gpt4 book ai didi

WPF:Validation.ErrorTemplate 未显示

转载 作者:行者123 更新时间:2023-12-03 02:08:53 25 4
gpt4 key购买 nike

我有一个用于在控件周围显示红色边框和错误消息的模板。它有效(在文本框和组合框上测试)。但在两个特定的组合框中却没有。
好吧,让我们看看虚拟机中有什么不同:

  • 因为我的基类中有通用的验证实现,所以没有变化
  • 显示相同类型的异步加载数据,只需一个面板即可很好地进行验证

简而言之,虚拟机没有区别。
View 完全相同,应用相同的样式,所以简而言之,也没有区别。

所以我添加了NotifyOnValidationError=TrueValidatesOnDataErrors=True已经在那里,并订阅了Validation.Error ... 它发射了!!!但模板仍然不显示。 我没有主意,请建议我检查一下!

编辑:进一步研究:

我已经反编译了 DataErrorValidationRule,并将其重新编译为 MyDataErrorValidationRule,以尽可能接近原始版本。我删除了ValidatesOnDataErrors=True ,并添加我的 ValidationRule 进行调试。它返回new ValidationResult(false, (object)str); str 两次包含正确的错误消息 - 一次用于将属性设置为 null,一次用于强制验证整个对象。 模板仍未显示。

我还检查了控件上的 Validation.GetErrorTemplate(在第一次触发 Validation.Error 时),它是 NOT NULL,所以它不是 DynamicResource但也失败了。

编辑:工作示例:

<ItemsControl ItemsSource="{Binding QuestionAnswers}">
<ItemsControl.Resources>
<!-- ... -->
<DataTemplate DataType="{x:Type Model:QuestionAnswerModel}">
<StackPanel>
<!-- here is the combo box -->
<ComboBox Margin="8,4" Padding="8" MinWidth="120" HorizontalAlignment="Left"
Validation.ErrorTemplate="{DynamicResource DefaultValidationErrorTemplate}"
ItemsSource="{Binding Options.Source}"
DisplayMemberPath="ItemName" SelectedValuePath="ItemID"
SelectedValue="{Binding Options.SelectedID, ValidatesOnDataErrors=true}" />

</StackPanel>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>

非工作示例:

<ComboBox Margin="8,4" Padding="8" MinWidth="120" HorizontalAlignment="Left"
Validation.ErrorTemplate="{DynamicResource DefaultValidationErrorTemplate}"
SelectedItem="{Binding Type.SelectedItem, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" Validation.Error="ComboBox_Error"
ItemsSource="{Binding Type.Source}"
DisplayMemberPath="Localized"
>

它们来自相同的 xaml 文件,包含工作 ComboBox 的 ItemsControl 与非工作 ComboBox 位于同一网格中。

唯一的区别是 SelectedItem 或 SelectedValue 是否已绑定(bind),但这不应该对验证有任何影响...

最佳答案

我遇到了确切的问题,即使事件正在触发,错误模板也不会显示,并且永远无法弄清楚为什么它只发生在某些控件而不是其他控件上。

我最终找到的解决方法是设置 ValidationStepConvertedProposedValue关于ValidationRule对于绑定(bind):

<TextBox>
<TextBox.Text>
<Binding Path="MyField">
<Binding.ValidationRules>
<Validation:MyValidationRule ValidationStep="ConvertedProposedValue" Message="Please enter a value." />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>

无论如何,这似乎对我有用!

编辑:如果您正在使用 IDataErrorInfo,您可以尝试(尽管我没有亲自测试过):

<Binding Path="MyField" ValidatesOnExceptions="True">
<Binding.ValidationRules>
<DataErrorValidationRule ValidationStep="ConvertedProposedValue" />
</Binding.ValidationRules>
</Binding>

即删除ValidatesOnDataErrors=True ,这只是包含单个 <DataErrorValidationRule /> 的快捷方式

关于WPF:Validation.ErrorTemplate 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10798163/

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