Databound WPF ComboBox con elemento ‘Nuovo …’

Ciao a tutti
Ho una casella combinata che è basata su un elenco di elementi. Ma oltre a quella lista di elementi, voglio avere un altro object. Questo articolo dovrebbe mostrare il testo ‘Nuovo …’
L’idea è se selezionano uno degli elementi normali, esegue un’azione che coinvolge quell’elemento. Se selezionano l’elemento ‘Nuovo’, li porteranno su una schermata in cui possono creare un nuovo elemento.
Il problema è che, quando si esegue il databind di qualcosa, non si ha la possibilità di aggiungere un altro elemento e non si tratta di aggiungere un elemento fittizio all’elenco di elementi …

È un’opportunità per creare un nuovo controllo basato sul ComboBox che ha una proprietà ‘DefaultElement’? (con tutti i relativi modelli e binding di comandi, ecc.)

Per fare ciò ho creato in precedenza una class wrapper fittizia per il tipo normale, che consente di associare a una lista contenente principalmente i valori corretti e anche la tua “Nuova …”, ad esempio

public class DisplayClass { public DisplayClass(ModelClass mc) { this.mc = mc; } public string Name { get { return this.mc != null ? this.mc.Name : "New..."; } } public bool IsDummy { return this.mc == null; } public ModelClass Model { return this.mc; } } 

È quindi ansible ospitare una raccolta di questi nel contesto dati (ViewModel) e gestire la selezione in modo appropriato in base a IsDummy . Non è automatico come un controllo con questa funzionalità integrata, ma è piuttosto semplice e potrebbe essere facilmente reso generico e quindi riutilizzabile.

Impostare la proprietà ItemsSource su CompositeCollection con il nuovo elemento e la raccolta associata insieme, quindi rilevare la selezione di quell’elemento in base all’indice selezionato o qualcosa di simile.

Codice di esempio:

    Add New Item...     

MSDN per CompositeCollection: http://msdn.microsoft.com/en-us/library/system.windows.data.compositecollection(v=vs.110).aspx

Tieni presente che ciò a cui ti colleghi è una raccolta di elementi orientata all’interfaccia utente che può essere diversa dall’azienda o dalle quadro di dati.

Se fossi in te, inserirò una “nuova” quadro nella prima posizione della raccolta vincasting e la rileverò nel mio viewmodel per triggersre l’azione appropriata quando l’utente la seleziona.