Sono nuovo a MVVM, solo recentemente ho iniziato il mio primo progetto seguendo il modello MVVM. Ho un problema nel tentativo di convalidare un ObservableCollection utilizzando l'interfaccia IDataErrorInfo. Il mio ObservableCollection assomiglia a questo:Convalida ObservableCollection associata in ViewModel utilizzando MVVM Pattern
ObservableCollection<Magazine> magazineRepository;
public ObservableCollection<Magazine> MagazineRepository
{
get { return magazineRepository; }
set
{
if (value != null)
{
bladRepository = value;
OnPropertyChanged("MagazineRepository");
}
}
}
E il mio XAML in questo modo:
<ListBox x:Name="listMagazineRepository"
Grid.ColumnSpan="2"
ItemsSource="{Binding}"
DataContext="{Binding MagazineRepository}"
DisplayMemberPath="Navn"
SelectedItem="{Binding Path=SelectedItem}"/>
<TextBox x:Name="txtName" Grid.Row="1" Grid.Column="0"
Text="{Binding ElementName=listMagazineRepository, Path=SelectedItem.Navn, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<TextBox x:Name="txtPrice" Grid.Row="2" Grid.Column="0"
Text="{Binding ElementName=listMagazineRepository, Path=SelectedItem.Pris, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
E 'solo un semplice listBox contenente oggetti, quando si seleziona un oggetto, le proprietà degli oggetti selezionati vengono visualizzati nelle caselle di testo, e viene quindi associato all'oggetto listbox.
Il mio problema è che quando ho impostato il mio codice in questo modo, l'unico modo per capire come convalidare i miei dati è nel modello di dominio, che in realtà non è una buona pratica, mi piacerebbe convalidare nel ViewModel prima che arrivi lì. Fondamentalmente voglio convalidare ogni proprietà nel MagazineRepository, nel ViewModel, come faresti a fare questo?
PS: Sono nuovo di postare su questo forum (e schede di programmazione in generale) se la mia domanda è carente di informazioni, per favore fatemelo sapere e fornirò i dettagli necessari.
Grazie mille.
Beh, non vedo un ViewModel nel codice che hai postato, ma il modo tipico sarebbe per il tuo ViewModel implementare IDataErrorInfo – Alan
Spiacente, pensavo fosse implicito.La collezione è nel mio ViewModel, che effettivamente implementa IDataErrorInfo, ma quando la casella di testo cambia una proprietà nella raccolta, devo convalidare su quella proprietà e non riesco a capire come farlo esattamente. Quindi ci sono 2 caselle di testo ciascuna associata a una proprietà nella raccolta e quando tale modifica di proprietà devo eseguire la convalida su di essa, facendolo nel modo in cui ho imparato con IDataErrorInfo, posso solo convalidare l'intera raccolta. –