UI complessa all’interno di ListBoxItem

In WPF, posso aggiungere qualsiasi UI in ListBoxItem fornendo al ListBox un ItemTemplate :

                  

Risultati in:

inserisci la descrizione dell'immagine qui

C’è un modo per ottenere lo stesso in Windows Form?

Modificare:

1 – Esiste un modo per ottenere lo stesso risultato in Windows Form, il tutto mantenendo la separation of concerns tra la View e la Application Logic in modo tale che se in seguito volessi ridefinire completamente la View , non dovrei refactoring intera applicazione?

2 – Le winform supportano l’associazione dati in modo tale che ciascuno dei miei ListBoxItems possa essere associato a Entity complessa, includendo eventualmente una conversione di tipo intermedio dai dati del modello ai dati dell’interfaccia e viceversa, in modo tale che non debba scrivere tonnellate di codice boilerplate per popolare la vista e quindi passare i valori dell’interfaccia utente nel modello per salvare?

3 – Cosa succede se volevo introdurre Animations in modo tale che l’attuale SelectedItem si espandesse animatamente in una sorta di modalità “Dettagli riga”, dove è ansible visualizzare molte informazioni aggiuntive?

4 – Winforms supporta la UI Virtualization in modo tale che se ho, diciamo 1 milione di elementi, non ci vuole una vita per caricare l’interfaccia utente e solo il rendering di ciò che è visibile sullo schermo?

5 – Dire che volevo introdurre una grafica complessa all’equazione. Il winforms rende l’hardware accelerato?

6 – Come faccio a rendere Resolution Independent questa Resolution Independent in modo tale che ListBox e tutto il suo contenuto si estendano alle dimensioni della finestra disponibili per sfruttare gli schermi più grandi mantenendo la compatibilità con quelli più piccoli?

7 – È stato suggerito di usare il controllo ListView invece di un ListBox regolare, il ListView fornisce la possibilità di aggiungere QUALSIASI UI al suo interno? posso aggiungere video per esempio per ogni articolo? o un modello Master / Dettagli complesso con Salva e modifica pulsanti?

8 – Le winform forniscono un modello di documento coerente e adeguato che consente la creazione di documenti WYSIWYG ad alta fedeltà e altri tipi di contenuti ricchi?

Per rispondere alla domanda generale: come farlo in WinForms, suggerirei quanto segue:

  1. Utilizzare un ListBox WPF nell’applicazione WinForms, racchiuso in un ElementHost. Questo ha i suoi problemi, ma penso che sia il modo più pulito per ottenere l’effetto desiderato.

    se questo non va bene, allora

  2. Utilizzare una suite di controllo di terze parti dotata di componenti che supportano questa funzionalità (Infragistics e DevExpress lo fanno entrambi).

  3. Fai ruotare il tuo controllo ListBox derivato che sovrascrive la pittura, ecc. Per rendere il contenuto desiderato.

Alle tue domande individuali:

  1. Esiste un modo per ottenere lo stesso risultato in Windows Form, il tutto mantenendo la separation of concerns tra la View e la Application Logic in modo tale che se in seguito volessi ridefinire completamente la View , non dovrei refactoring dell’intera applicazione ?
    In passato, ho utilizzato il paradigma MVP (model-view-presenter) con Windows Forms. Funziona per separare la vista dalla logica di business, anche se non in modo pulito come un approccio MVVM con WPF. Il miglior consiglio che posso dare è: non mettere la logica di business nei gestori di eventi.

  2. Le winform supportano l’associazione dati in modo tale che ciascuno dei miei ListBoxItems possa essere associato a Entity complessa, includendo eventualmente una conversione di tipo intermedio dai dati del modello ai dati dell’interfaccia utente e viceversa, in modo tale da non dover scrivere tonnellate di codice boilerplate per popolare la vista e quindi passare i valori dell’interfaccia utente nel modello per salvare?
    No. L’associazione dati Windows Form non supporta l’associazione di dati complessi. È ansible implementare qualcosa da soli tramite ICustomTypeDescriptor o IBindingSource che possono intraprendere percorsi complessi e valutarli per scopi vincolanti … ma nulla esiste fuori dagli schemi per questo.

  3. Che cosa succede se volevo introdurre Animations in modo tale che l’attuale SelectedItem si espandesse animatamente in una sorta di modalità “Dettagli riga”, dove è ansible visualizzare molte informazioni aggiuntive?
    Dovresti eseguire il rollover del tuo ListBox e ListBoxItems di Windows Form e sovrascrivere le operazioni di disegno.

  4. Le winform supportano la UI Virtualization in modo tale che se ho, diciamo 1 milione di elementi, non ci vuole una vita per caricare l’interfaccia utente e solo il rendering di ciò che è visibile sullo schermo?
    Non fuori dalla scatola, ma alcune suite di controllo di terze parti hanno componenti che supportano i tipi di virtualizzazione … ma non lo sono affatto nello stesso modo di WPF.

  5. Diciamo che volevo introdurre una grafica complessa all’equazione. Il winforms rende l’hardware accelerato?
    Windows Form si basa su GDI +. GDI + non ha accelerazione hardware: Windows Form è molto lento con Windows7?

  6. Come faccio a rendere Resolution Independent questa Resolution Independent in modo tale che ListBox e tutto il suo contenuto si estendano alle dimensioni della finestra disponibili per sfruttare gli schermi più grandi mantenendo la compatibilità con quelli più piccoli?
    È ansible utilizzare l’ancoraggio e l’ancoraggio in Windows Form per ottenere ciò. Oppure puoi aggiungere gestori di eventi personalizzati per eseguire aggiustamenti di layout appropriati in base alla risoluzione e alle dimensioni della finestra.

  7. È stato suggerito di usare il controllo ListView invece di un ListBox regolare, il ListView fornisce la possibilità di aggiungere QUALSIASI UI al suo interno? posso aggiungere video per esempio per ogni articolo? o un modello Master / Dettagli complesso con Salva e modifica pulsanti?
    Questo sta semplificando … ma un ListView è semplicemente un ListBox che supporta più tipi di visualizzazione. È anche più limitato in termini di databinding. http://blog.gfader.com/2008/09/winforms-listbox-vs-listview.html .

  8. Le winform forniscono un modello [modello documento] [2] coerente e adeguato che consente la creazione di documenti WYSIWYG ad alta fedeltà e altri tipi di contenuti multimediali?
    No. Niente affatto. Nemmeno un po.

In breve, se è una soluzione accettabile, vorrei avvolgere il tuo WView ListView in un ElementHost e chiamarlo un giorno.

Lo abbiamo fatto utilizzando UserControls in un pannello scorrevole. Preparato un controllo utente che ha tutti i controlli di modifica su di esso. Aggiungili a un pannello scorrevole con la proprietà dosk impostata su Alto. Implementato il comportamento di selezione degli articoli osservando l’triggerszione e facendo clic sugli eventi sugli elementi di controllo utente aggiunti.