Domanda

Ho bisogno di una BindingList nel mio UI per fornire a due vie databinding tra la mia collezione e un DataGridView. Tuttavia, non sembra corretta per restituire un BindingList dal vostro livello di business (o un livello di dominio, livello di servizio, livello di dati, etc.). Cioè, sarei utilizzando solo un BindingList a causa di un requisito di interfaccia utente, e ora questa necessità UI sarebbe accoppiato con il mio livello di dominio.

Qual è il modo "corretto" disaccoppiato per fare questo? Dovrei restituire un IList e poi copiarlo in una BindingList per scopi di presentazione? Dal punto di vista del mondo reale, è questo niente vale la pena in testa?

È stato utile?

Soluzione

Credo che lo strato di dominio sarebbe tornato tipi più generici e siano essi notificante (ObservableCollection<>) o meno (IEnumerable<> o IList<>) è all'altezza dei requisiti.

Lo strato UI può trattare con tranforming loro come vogliono (o non) in IBindingList se hanno bisogno di tale funzionalità.

Abbiamo usato BindableLinq con grande successo per raggiungere gli obiettivi di notifica / sincronizzato elenco vincolante di (possibilmente con filtri ) a livello di interfaccia utente.

Altri suggerimenti

Non è la copia di un IList (almeno spero non si vuole davvero creare una copia / clone). Tutto quello che fa di solito è la creazione di un altro riferimento sullo stesso oggetto IList. Così la restituzione di un oggetto IList c'è niente di male.

Potete restituire esempio un oggetto List e si riferiscono ad essa fuori della BindingList (che si trova nella vostra interfaccia utente).

A mio parere è meglio restituire un oggetto IList (List, Aso HashTable) che un BindingList come si può utilizzare l'ex su diverse interfacce utente (Console, Web, Windows, Service). Per esempio. utilizzando un BindingList non sarebbe di alcun vantaggio in un'applicazione web.

non so ciò che il modo "corretto" è, ma ho quadri usati come CSLA in passato e so che ha usato un BindingList e ora un ObservableCollection per le liste di business. Ciò ha reso utilizzando gli oggetti di business nell'interfaccia utente molto semplice come l'interfaccia utente sarebbe aggiornare quando sono stati aggiunti o rimossi elementi dalle liste. Se si restituisce un IList e quindi copiarlo in una BindingList è necessario controllare manualmente e le modifiche maniglia verso IList e tradurre quelle a BindingList. La mia preferenza personale è quello di avere una funzione di strato ricco professionale, visto che utilizzerebbe un BindingList o ObservableCollection per presentare lo strato di business per l'interfaccia utente.

Se si desidera che gli elementi dell'interfaccia utente per modificare il modello di business senza implementare i propri gestori di evento, il modello di business deve avere un BindingList.

Ogni volta che si fa qualcosa di simile new BindingList<MyWidget>( list ) si sta disaccoppiamento l'associazione dal lista radice. Se un elemento viene modificato, sarà tutto funzionare bene, ma le aggiunte e le eliminazioni non verrà riflessa nella lista originale.

Recentemente ho provato attuare qualcosa di simile, sfruttando l'evento ListChanged BindingList, che ha aggiornato il mio modello per riflettere il BindingList cambia, ma se il modello è stato cambiato dal controllore non ha aggiornato il BindingList nell'interfaccia utente.

Si potrebbe produrre di accesso speciali per le vostre liste che gli eventi innalzare ogni volta che si aggiungono o articoli rimuovere dalla lista, ma questo è solo re-inventare la ruota BindingList con più testa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top