Quindi, ho una tabella clienti, contenente record clienti, record, ognuno dei quali ha un campo customertipo. Ho anche una tabella customertype, contenente i valori validi per il campo customertype.WPF/XAML - Consentire a ComboBox di avere SelectedValue che non è in ItemsSource
E ho bisogno di un WPF per fare CRUD. (Crea, rivedi, aggiorna, cancella).
La soluzione ovvia è utilizzare un ComboBox, con la proprietà SelectedValue associata al campo customertype e la relativa proprietà ItemsSource associata a un elenco popolato da una query della tabella customertype.
Il problema è che questo non funziona se non nel tipo di semplice problema che si vede negli esercizi.
La difficoltà si pone quando si visualizza o si modifica un record del cliente che ha un valore di tipo di cliente che non è nella tabella del tipo di cliente. Questo può accadere per errore o può accadere perché il tipo di cliente è stato deprecato e rimosso dalla tabella.
In questo caso, WPF deve impostare il campo customertype su null, in quanto SelectedValue non si trova nell'elenco ItemsSource. E questo è un problema.
Se si sta visualizzando solo, è necessario visualizzare il valore presente nella tabella, indipendentemente dal fatto che sia presente nell'elenco. Se stai modificando, puoi fare una ragionevole argomentazione che dovresti anche mostrare il valore che è nella tabella, almeno inizialmente, anche se se cambi la selezione, non puoi ottenere ciò che hai iniziato.
Quindi, qualche idea? Questo è un problema che si verifica praticamente su ogni modulo di modifica/visualizzazione, quindi preferirei qualcosa che sia ragionevolmente pulito al punto di utilizzo. (Cioè, data la scelta della complicazione nello XAML, in ogni caso ho bisogno di gestire uno di questi campi, o complicazione nel codice che supporta il XAML che inserisco per gestire uno di questi campi, preferirei quest'ultimo.)
Ci sto provando e non funziona. Il codice che sta dietro ItemsSource di Combobox ora inserisce l'attuale customerid, se non è in quello che viene restituito dal database, se stiamo visualizzando un record esistente. Ma se cambio per modificare un nuovo record, sto innalzando PropertyChanged sulla proprietà ItemsSource, e nel debugger posso vedere il codice chiamato, e una nuova lista costruita che non include il valore extra, ma nell'interfaccia utente, Vedo ancora la prima lista. –
Hai trie usando ObservableCollection per ItemsSource o INotifyPropertyChanged quando la tua collezione di List cambia? – Josh
Solo un po 'di confusione mentale da parte mia. Non stavo allevando proprietà sulla proprietà che pensavo di essere. –