Użycie DataGrid w WPF, próbuję uzyskać prawidłowe zachowanie podczas korzystania z sprawdzania błędów za pośrednictwem INotifyDataErrorInfo.Błąd sprawdzania poprawności wiersza datagrid WPF nie po wyczyszczeniu
Posiadam ObservableCollection klasy, która implementuje ten interfejs, powiązanie kolekcji z DataGrid. Kiedy wystąpi błąd, komórka będzie miała czerwoną granicę, a rząd będzie miał czerwony! z przodu. Wszystko domyślnie, wszystko dobrze. Podczas edycji, gdy błąd zniknie, czerwona ramka i czerwona! oba znikną. Jak na razie dobrze!
Jednak po wyjściu z rzędu (za pomocą klawiatury Enter/Tab lub za pomocą myszy), wróć do niego, a następnie usuń błąd, znika czerwona ramka, ale czerwona! gorset.
Zdaję sobie sprawę, że to pytanie zostało poruszone wcześniej, na przykład tutaj: WPF DataGrid validation errors not clearing. Jednak rozwiązania tam nie rozwiązują tego problemu, poza całkowitym ukrywaniem błędu sprawdzania poprawności wiersza. (Które, w połączeniu z czymś podobnym do drugiej odpowiedzi, here jest również całkiem w porządku ...)
Czy mój problem polega raczej na tym, że użytkownik może wyjść z trybu edycji komórki, mimo że istnieje błąd sprawdzania poprawności? Najlepiej, chciałbym ograniczyć to i wymuszam najpierw rozdzielczość błędu, zanim może się zdarzyć dalsza edycja, ale nie wiem jak to wymusić bez mnóstwa kodu ...
Oto XML (RowValidationErrorTemplate pochodzi stąd: 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>