Layout WPF

lunedì 04 marzo 2013 - 00.03
Tag Elenco Tags  C#

dio_90 Profilo | Newbie

Buona sera a tutti!
Cercherò di esporre il problema nella maniera più semplice e diretta possibile... Ho un database con diverse categorie e ad ogni categoria è associato un numero variabile di prodotti. Vorrei creare, usando le wpf, un layout del tipo una colonna per ogni categoria(ogni colonna con al di sotto i suoi prodotti). Le colonne dovranno avere tutte la stessa larghezza, mentre l'altezza dei button dovrà essere tale da riempire tutto lo spazio a disposizione nella colonna che contiene più prodotti. Qualcuno ha qualche idea?
Grazie in anticipo! :)
___________________
Luca Romandini

0v3rCl0ck Profilo | Guru

ciao,

con wpf sconsiglio sempre le classiche strutture a tabella, perchè si possono costruire interfacce molto più funzionali senza usare le classiche tabelle, anzi paradossalmente una classica tabella a volte risulta più complicata da sfruttare, specialmente con colonne variabili, se si vuole sfruttare il meccanismo di binding...

ad ogni modo l'idea di base era avere un certo numero di colonne corrispondente al numero di categorie, e ogni colonna contiene un pulsante per ogni prodotto, fino a riempire tutto lo spazio a disposizione tra tutti i pulsanti prodotto, corretto? o è l'header della colonna ad avere il pulsante non ho capito...


-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/

dio_90 Profilo | Newbie

Prima di tutto grazie per la risposta... mi scuso per il ritardo ma gli impegni universitari mi hanno tenuto lontano dai miei "hobby".
Quello che hai scritto è sostanzialmente giusto: una colonna per ogni tipologia e per ogni tipologia un bottone per ogni suo prodotto. Per ora ho risolto via codice creando dentro ad una uniformgrid tante uniform grid quante sono le tipologie e ad ognuna di queste uniformgrid interne ho messo il numero delle righe corrispondente al numero di prodotti contenuti nella tipologia che ha più prodotti. L'effetto è quello di avere la colonna della tipologia con più prodotti completamente riempita, e le altre colonne non completamente riempite, ma con i bottoni dei prodotti tutti della stessa dimensione. E' esattamente quello che volevo ma... non sono soddisfatto perché "ho l'impressione" di aver ragionato alla maniera "windows form" :)
___________________
Luca Romandini

0v3rCl0ck Profilo | Guru

mi faresti vedere uno screenshot o uno sketchflow per capire meglio, perchè dalla spiegazione non ho capito bene come deve essere il risultato finale, così posso darti un esempio di come riprodurre la stessa cosa in un modo più WPF oriented, dove il concetto è quello di utilizzare un pattern MVVM (model-view-viewmodel) che applicato alle viste, e con un po' di DataTemplating, ti fa sfruttare le vere potenzialità di WPF.


-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/

dio_90 Profilo | Newbie

Allego uno screen...

1366x768 142Kb


___________________
Luca Romandini

dio_90 Profilo | Newbie

E' abbastanza chiaro lo screen? nel caso servissero altre info sarò ben lieto di dartele! grazie comunque per la disponibilità.
___________________
Luca Romandini

0v3rCl0ck Profilo | Guru

Si si direi che è chiaro, domani ti faccio un esempio di come riprodurre la stessa cosa sfruttando le vere potenzialità di WPF tra cui: style, template, binding e dataTemplate, e per il binding sfruttando il pattern MVVM (model-view-viewmodel)

Giusto un punto di partenza, per poi approfondire ogni strumento dato a disposizione, intanto ne vedrai un assaggio.


-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/

0v3rCl0ck Profilo | Guru

Ti ho allegato l'esempio in stile WPF. E' stato fatto con Visual Studio 2012, fammi sapere se ti serve la versione 2010, anche se non devi fare altro importare i file in un progetto wpf 2010 e dovrebbero essere tranquillamente compilabili anche il framework 4.0 da vs2010.

Vedrai che nel progetto troverai svariati commenti che spiegano a grandi linee i vari strumenti utilizzati.

Infine nel progetto sono state fatte delle implementazioni base per le interfacce INotifyPropertyChanged e ICommand, puramente a scopo didattico, per farti capire da dove nasce l'esigenza di avere un framework MVVM completo come Radical, Caliburn, PRISM, MVVM Light, Simple MVVM, ecc... o per lo meno un set di classi base e implementazioni riutilizzabili in più parti del progetto e in più progetti, perchè sono sempre le stesse cose macinate e rimacinate.

Ti consiglio di prendere in considerazione l'opzioni di adottare il framework Radical come base per i tuoi progetti, e puoi partire da questo semplice tutorial pubblicato sul mio blog:

http://blogs.dotnethell.it/Regulator/WPF-Tutorial-MVVM-in-un-Minuto-con-Radical__19072.aspx

a seguire pubblicherò altri tutorial per la UI Composition, e a seguire il Commading, Notification, Message Broker, ecc... il tutto sfruttando Radical come framework base.


-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/

0v3rCl0ck Profilo | Guru

Hai provato l'esempio? come ti sembra, tutto chiaro?

Nel frattempo mi si è accesa una lampadina, e ho trovato un modo di farlo ancora meglio a mio modo di vedere, mantenendo un ViewModel più strutturato, con la relazione tra ProductType e Product attraverso una List, come si farebbe normalmente per una modellazione corretta, che non avevo fatto per il semplice motivo che avevo bisogno di andare incontro alle esigenze della View (cosa del tutto normale), ma poi riscoprendo le CompositeCollection che mi ero palesemente dimenticato, e che sono la manna per questo tipo di problematica che hai.

Quindi...ti ho riallegato i nuovi sorgenti dove ho aggiunto questo altro metodo.

fammi sapere...

ciao
-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/

dio_90 Profilo | Newbie

Troppo gentile, davvero!
Rispondo con un poco di ritardo dato che sono stato fuori per pasqua... Ho guardato l'esempio(il primo) ed a dire il vero ci sono alcuni punti che mi sono rimasti un poco oscuri, ma nulla che non si risolva leggendo un libro. Stasera, appena rientro dall'università, scarico e guardo il secondo esempio :)
___________________
Luca Romandini

0v3rCl0ck Profilo | Guru

a breve pubblicherò sul mio blog un articolo proprio legato a questo esempio con tutti i modi che ho trovato per raggiungere lo stesso obiettivo (ne ho trovato 1 o 2 in più rispetto all'ultimo sorgente che ti ho inviato)

ciao!
-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/

dio_90 Profilo | Newbie

Seguirò con attenzione!
E ne approfitto per farti una domandina veloce... Ho creato una listview bindata ad una list. La listview ha tre colonne(nome, quantità e prezzo) qual'è il modo migliore per mettere il una label la sommatoria dei prezzi? naturalmente il totale deve aggiornarsi ogni volta in cui venga aggiunta, rimossa o modificata una riga. Sai, ho come l'impressione che un foreach che sommi i prezzi ogni volta che venga modificata la list non sia la cosa migliore da fare :)
Buona giornata!
___________________
Luca Romandini

0v3rCl0ck Profilo | Guru

ti ho trovato qualche link con spiegazione e guida, questo ha un approccio MVVM:

http://wpf.codeplex.com/discussions/53728?ProjectName=wpf

l'esempio è l'ultima risposta in fondo. Il toolkit non serve più dalla versione, il DataGrid è già incluso dal framework 4 in su, quell'esempio dovrebbe darti lo spunto giusto.

altre buone guide generiche le trovi qui:

http://wpftutorial.net/DataGrid.html?showallcomments#selection
http://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples


-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5