Po wybraniu (przez kliknięcie lub klawiaturą) pustego wiersza w mojej DataGrid (gdy chcę dodać nowy wiersz), pojawia się nieoczekiwany błąd sprawdzania poprawności (ale bez wyjątku) - granica zmiany datagridu na czerwony kolor, jak widać na poniższym obrazku. Kiedy kliknę drugi raz na pustym wierszu, czerwona ramka zniknie. Wszystko inne działa poprawnie, dodawany jest nowy wiersz. Poza tym nie mam żadnych reguł sprawdzania poprawności. A kiedy robię wiersz z pustym tekstem, wartość jest poprawna.Nieoczekiwane czerwone obramowanie (błąd sprawdzania poprawności) w DataGrid podczas wybierania pustego wiersza
Nie chcę tego zachowania i tej czerwonej granicy, czy ktoś wie, dlaczego tak się dzieje i jak to naprawić? Dlaczego i gdzie kończy się proces sprawdzania poprawności?
Poniżej dołączania kodu źródłowego:
definicję DataGrid w XAML:
<DataGrid IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name"
ItemsSource="{Binding Path=ConfigFiles}" SelectedItem="{Binding Path=SelectedConfigFile}"
Grid.Column="1" Height="87" Margin="0,26,11,32" Style="{DynamicResource DataGridStyle}">
<DataGrid.Columns>
<DataGridTextColumn Width="1*" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
My ViewModel za część:
public class ManageModulesVM : BaseVM // Implements INotifyPropertyChanged
{
// ...
public ObservableCollection<ConfigFile> ConfigFiles
{
get { return selectedModule == null ? null : selectedModule.ConfigFiles; }
set
{
selectedModule.ConfigFiles = value;
OnPropertyChanged(() => ConfigFiles);
}
}
public ConfigFile SelectedConfigFile
{
get { return selectedModule == null ? null : selectedModule.SelectedConfigFile; }
set
{
if (value != null)
{
selectedModule.SelectedConfigFile = value;
}
OnPropertyChanged(() => SelectedConfigFile);
OnPropertyChanged(() => Parameters);
}
}
// ...
}
ConfigFile klasa:
public class ConfigFile
{
public string Name { get; set; }
public IList<Parameter> Parameters { get; set; }
public ConfigFile() { Name = ""; Parameters = new List<Parameter>(); }
}
Edit: Po dalszych badań wiem, że SelectedItem Oprawa jest przyczyną problemów (gdy usunę tego wiązania, błąd walidacji przestanie się pojawiać), ale nadal nie wiem dlaczego i jak to naprawić.
nie wiem, że jest to problem, ale masz podwójne odniesień do wiązania się z nazwy. Usunąłbym DisplayMemberPath. Możesz również dołączyć do nazwy konwerter pass thru (string to string), dzięki czemu możesz złapać wyjątek. I jawnie umieściłbym mode = twoway na powiązaniu. – Paparazzi
@BalamBalam dobry punkt, To nie rozwiązało mojego problemu, ale też było pomocne. –