Quando seleziono (facendo clic o tramite tastiera) una riga vuota sul mio DataGrid (quando voglio aggiungere una nuova riga), si verifica un errore di convalida inaspettato (ma senza eccezioni) - il bordo di datagrid cambia in rosso, come puoi vedere nell'immagine qui sotto. Quando clicco una seconda volta su una riga vuota, il bordo rosso scompare. Tutto il resto funziona bene, la nuova riga viene aggiunta. Inoltre, non ho regole di convalida. E quando faccio una riga con testo vuoto, il valore è valido.Bordo rosso inatteso (errore di convalida) su DataGrid quando si seleziona una riga vuota
Non voglio questo comportamento e questo bordo rosso, nessuno lo sa, perché questo succede e come risolverlo? Perché e dove fallisce qualche convalida?
Qui di seguito aggiungo un po 'di codice sorgente:
definizione DataGrid in 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>
parte del mio ViewModel:
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 classe:
Modifica: Dopo un'ulteriore analisi, so che SelectedItem Binding sta causando problemi (quando rimuovo questa associazione, l'errore di validazione smette di apparire), ma non so ancora perché e come risolverlo.
Non so che questo è il tuo problema, ma bisogna doppi riferimenti a legame a Nome. Rimuoverei il DisplayMemberPath. È anche possibile collegare un pass through converter (da stringa a stringa) sul nome e in questo modo è possibile rilevare l'eccezione. E metterei esplicitamente mode = twoway sul binding. – Paparazzi
@BalamBalam buon punto, non ha risolto il mio problema, ma è stato utile anche. –