3

我通过这个 WPF 验证、IDataErrorInfo、INotifyPropertyChange 的东西到达那里,但是刷新时出现了新问题。我有一个窗口,上面有一堆控件。我有一个选项卡式页面界面,为简单起见,有 2 个页面......每个页面上有 5 个控件。

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

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

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

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

谢谢

4

2 回答 2

6

只需将您验证的控件放入 AdornerDecorator 即可正常工作;)

 <TabItem>
  <AdornerDecorator>
    <Grid>
      <TextBox>
      </TextBox>
      ...
   </Grid>
  </AdornerDecorator>
</TabItem>
于 2013-05-04T20:15:50.940 回答
1

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

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

于 2012-05-04T19:11:43.843 回答