【问题标题】:WPF Binding in TextBlock.Text to Validation.Errors not workingTextBlock.Text 中的 WPF 绑定到 Validation.Errors 不起作用
【发布时间】:2015-01-08 03:47:11
【问题描述】:

我有一个 ItemsControl,它由实现 INotifyDataErrorInfo 的 DataContext 上的对象验证。预期效果是验证错误显示在 TextBlock 中的控件下方,而不是传统的红色边框和工具提示样式。

验证后,我的 TextBlock 出现了,但它的 Text 是空的 - 我绑定到验证错误时有问题,但我不知道是什么。

此外,TextBlock 与 ItemsControl 下方的控件重叠,而不是为自己腾出额外的空间。我该如何解决这些问题?

<ItemsControl ...>
    <Validation.ErrorTemplate>
        <ControlTemplate>
            <StackPanel>
                <AdornedElementPlaceholder />
                <TextBlock Text="{Binding RelativeSource={RelativeSource Self},
                    Path=(Validation.Errors).CurrentItem.ErrorContent}" />
            </StackPanel>
        </ControlTemplate>
    </Validation.ErrorTemplate>
</ItemsControl>

【问题讨论】:

    标签: c# wpf validation xaml data-binding


    【解决方案1】:

    几天前我遇到了与您的第一个问题相同的问题。当我使用 Snoop 检查ErrorTemplate 中的控件时,我发现ErrorTemplate 中的DataContext 已经是ReadOnlyObservableCollection&lt;ValidationError&gt; 类型。所以你可以只使用&lt;TextBlock Text="{Binding CurrentItem.ErrorContent}" /&gt;,不需要转换和设置RelativeResource。

    【讨论】:

    • +1 我对此一无所知,也许我找到了自己的解决方案,有点老套,对此感到满意。
    • 是的 - 完全符合预期,谢谢!现在,如果我可以让模板为自己腾出空间。它似乎是绝对定位的,而不是作为文档流的一部分,如果您只想绘制红色边框,这是有道理的,但如果您想做其他任何事情,它就会受到奇怪的限制。
    • 您是否尝试过改用DockPanel?我用它在占位符的右侧显示一个警告图标,即图标上的 Dock.Right。
    猜你喜欢
    • 2018-02-20
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多