代码之家  ›  专栏  ›  技术社区  ›  Noel Kennedy

数据错误时未显示验证错误模板

  •  20
  • Noel Kennedy  · 技术社区  · 14 年前

    这是一个有点wpf whodunnit!我的验证认为它不会在预期的时候出现。

    问题

    基本上,我在视图模型上使用IDataErrorInfo来提供关于数据输入错误的反馈。我可以看到这个被调用并按预期工作,但是WPF从未显示绑定控件的验证错误模板!

    我尝试了使用内置的默认文本框红色边框错误模板、样式错误模板和硬编码模板。这些都不会在数据错误情况下显示。

    这是我的XAML绑定代码:

    <TextBox x:Name="txtCaseNumber"  
    Text="{Binding Path=CaseNumber, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>
    

    wierdly,错误进入validation.errors集合。以下代码将导致我的IDataErrorInfo错误消息显示在绑定控件旁边。这让我觉得问题在XAML方面,而不是在ViewModel方面。

    <ContentPresenter 
    Content="{Binding ElementName=txtCaseNumber, Path=(Validation.Errors).CurrentItem}" />
    

    此外, System.Windows.Controls.Validation.GetHasError(txtCaseNumber) 返回true。

    我正在WinForms中托管WPF,如果这有区别的话。我在代码或样式中找不到任何对验证或错误模板的引用,所以我很确定这不是样式本身的目标。

    1 回复  |  直到 10 年前
        1
  •  44
  •   Noel Kennedy    14 年前

    把它弄碎了。

    ErrorTemplate附加属性 uses the adorner layer 显示通过IDataErrorInfo报告的数据验证失败的错误模板。装饰层是 not always available 所有情况下的所有控件。您的控件或其父控件之一需要显式提供一个。

    默认窗口控件模板包含一个AdornerDecorator,它为其子级启用Adorner层。这就是我的另一个窗口显示错误模板的原因,因为这个窗口使用了默认的控件模板

    没有显示我的错误模板的窗口使用了为我的窗口提供控件模板的样式。此控件模板未提供 <AdornerDecorator> 因此没有装饰层来显示我的错误模板。

    修复方法很简单,只需使用 <装饰设计师> .

    推荐文章