【问题标题】:wpf validation refresh between tabbed pages选项卡式页面之间的 wpf 验证刷新
【发布时间】:2012-05-14 06:52:19
【问题描述】:

我正在使用此 WPF 验证、IDataErrorInfo、INotifyPropertyChange 内容,但刷新时出现新问题。我有一个窗口,上面有一堆控件。我有一个选项卡式页面界面,为简单起见,有 2 个页面...每个页面有 5 个控件。

我开始“添加”一条记录,所以所有字段都是空白的。例如:第一页上需要验证的 3 个字段被正确标记为红色边框以表明它们是必需的...没问题。

现在,我点击第 2 页并立即返回第 1 页。红色边框全部消失。它们不会重新显示为红色,除非我明确地通过它们重新聚焦它们,失去焦点并强制它通过 IDataErrorInfo 执行其 lostfocus / 属性更改验证。

首先,解释为什么 WPF 会丢失第一页的外观,因为它必须更改第 1 页的可见性以显示第 2 页,然后再返回到第 1 页。

其次,关于如何强制控件正确刷新的建议,红色边框表示它们是必需的。

谢谢

【问题讨论】:

    标签: wpf validation tabbed-interface


    【解决方案1】:

    如果我没记错的话,控件的默认错误验证标记只是覆盖在控件顶部的红色框,而不是控件本身的一部分,因此如果控件被隐藏,则该覆盖的可见性不会持续存在。您可以尝试更改控件模板以将红色边框/标签直接合并为控件的一部分,该问题可能会得到解决。

    要强制刷新所有绑定(并因此刷新它们的验证),您只需为要重新验证的任何属性再次调用 RaisePropertyChanged。有点浪费,不过你可以直接调用 RaisePropertyChanged ,用一个空字符串作为参数,它会为视图模型中的所有属性引发。

    【讨论】:

    • 我下周回办公室试试。
    【解决方案2】:

    只需将您验证的控件放在 AdornerDecorator 中,它就可以正常工作;)

     <TabItem>
      <AdornerDecorator>
        <Grid>
          <TextBox>
          </TextBox>
          ...
       </Grid>
      </AdornerDecorator>
    </TabItem>
    

    【讨论】:

    • 如果我能吻你我会的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多