选项卡式页面之间的wpf验证刷新

选项卡式页面之间的wpf验证刷新,wpf,validation,tabbed-interface,Wpf,Validation,Tabbed Interface,我用这个WPF验证,IDataErrorInfo,INotifyPropertyChange的东西,但是关于刷新的新问题。我有一个有很多控件的窗口。我有一个选项卡式页面界面,为简单起见,有2页。。。每台计算机上有5个控件 我开始“添加”记录,因此所有字段都为空。例:第一页上需要验证的字段中有3个正确标记为红色边框,以指示它们是必需的。。。没问题 现在,我点击第2页并立即返回第1页。红色边界都消失了。它们不会重新显示为红色,除非我通过IDataErrorInfo显式地标记它们以重新聚焦、失去焦点并

我用这个WPF验证,IDataErrorInfo,INotifyPropertyChange的东西,但是关于刷新的新问题。我有一个有很多控件的窗口。我有一个选项卡式页面界面,为简单起见,有2页。。。每台计算机上有5个控件

我开始“添加”记录,因此所有字段都为空。例:第一页上需要验证的字段中有3个正确标记为红色边框,以指示它们是必需的。。。没问题

现在,我点击第2页并立即返回第1页。红色边界都消失了。它们不会重新显示为红色,除非我通过IDataErrorInfo显式地标记它们以重新聚焦、失去焦点并强制它执行其lostfocus/property changed验证

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

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


谢谢

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


要强制所有绑定刷新(以及它们的验证),您需要做的就是再次调用要重新验证的任何属性的RaisePropertyChanged。这有点浪费,但您可以使用空字符串作为参数调用RaisePropertyChanged,它将为viewmodel中的所有属性引发。

只需将验证的控件放在一个AdorneDecorator中即可;)


...

我下周回办公室试试。如果我能吻你,我会的
 <TabItem>
  <AdornerDecorator>
    <Grid>
      <TextBox>
      </TextBox>
      ...
   </Grid>
  </AdornerDecorator>
</TabItem>