编辑后未清除WPF数据网格行验证错误
本文关键字:网格 验证 错误 数据网 数据 清除 WPF 编辑 | 更新日期: 2023-09-27 18:02:51
使用WPF中的数据网格,我试图通过INotifyDataErrorInfo使用错误验证来获得正确的行为。
我有一个实现该接口的类的ObservableCollection,并将该集合绑定到DataGrid。当出现错误时,单元格将具有红色边框,行将具有红色边框!在前面。一切违约,一切顺利。当还在编辑时,当错误消失时,红色边框和红色!都会消失。到目前为止,一切顺利!
然而,当我离开行(通过键盘输入/Tab或用鼠标),然后回来,然后删除错误,红色单元格边界消失,但红色!保持。
我知道这个问题以前已经提出过,例如这里:WPF DataGrid验证错误未清除。但是,除了完全隐藏行验证错误之外,解决方案并不能解决这个问题。(这,结合这里的第二个答案也很好…)
或者是我的问题,而不是用户能够离开单元格的编辑模式,即使有一个验证错误?最好是,我想限制这一点,并在进一步编辑之前先强制解决错误,但我不知道如何在没有大量代码的情况下强制执行这一点……
这是XML (RowValidationErrorTemplate来自这里:link):
<UserControl x:Class="CustomDG"
...etc...
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
d:DataContext="{d:DesignInstance Type=viewmodels:TestViewModel}">
<Grid>
<DataGrid
ItemsSource="{Binding Path=testCollection}" AutoGenerateColumns="False"
RowHeight="18" CanUserResizeRows="False" RowHeaderWidth="18" >
<DataGrid.RowValidationErrorTemplate>
<ControlTemplate>
<Grid Margin="0,-2,0,-2"
ToolTip="{Binding RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type DataGridRow}},
Path=(Validation.Errors)[0].ErrorContent}">
<Ellipse StrokeThickness="0" Fill="Red"
Width="{TemplateBinding FontSize}"
Height="{TemplateBinding FontSize}" />
<TextBlock Text="!" FontSize="{TemplateBinding FontSize}"
FontWeight="Bold" Foreground="White"
HorizontalAlignment="Center" />
</Grid>
</ControlTemplate>
</DataGrid.RowValidationErrorTemplate>-->
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name,
ValidatesOnNotifyDataErrors=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
你需要引发notifyPropertyChanged与空字符串后行提交或取消编辑刷新DataBinding From对象,这将刷新你的接口使用它像这样:
RaiseNotifyPropertyChanged("");