我通过这个WPF验证,IDataErrorInfo,INotifyPropertyChange的东西到达那里,但刷新时出现了新问题。我有一个窗口,上面有一堆控件。我有一个标签页面界面,为简单起见,有2页......每个页面都有5个控件。
我开始“添加”记录,因此所有字段都是空白的。例如:第一页上需要验证的3个字段被正确标记为红色边框,表示它们是必需的......没问题。
现在,我点击第2页,然后立即返回第1页。红色边框全部消失。它们不会重新出现红色,除非我明确地通过它们重新聚焦它们,失去焦点并强迫它通过IDataErrorInfo进行lostfocus /属性更改验证。
首先,任何解释为什么WPF会丢失第一页的样子,因为它必须将第1页的可见性更改为显示第2页,然后再返回第1页。
其次,关于如何强制刷新控件的建议,红色边框表示需要它们。
由于
答案 0 :(得分:3)
只需将您验证的控件放在AdornerDecorator中,它就能正常工作;)
<TabItem>
<AdornerDecorator>
<Grid>
<TextBox>
</TextBox>
...
</Grid>
</AdornerDecorator>
</TabItem>
答案 1 :(得分:0)
如果我没记错的话,控件的默认错误验证标记只是覆盖在控件顶部的红色框,而不是控件本身的一部分,因此如果隐藏控件,则该叠加层的可见性不会持续存在。您可以尝试更改控件模板以直接将红色边框/标签合并为控件的一部分,并且可能会清除该问题。
要强制所有绑定刷新(以及验证它们),您需要做的就是再次为要重新验证的任何属性调用RaisePropertyChanged。这有点浪费,但是您可以使用空字符串作为参数调用RaisePropertyChanged,它将为视图模型中的所有属性引发。