Domanda

mi è stato armeggiare intorno con il modello MVVM e ora sto cercando di attuare una piccola applicazione basata su di esso.

Questa applicazione ha un datagrid in cui, sorprendentemente, alcuni dati è presentato. Ora sto cercando di aggiungere un po 'la capacità di raggruppamento ad esso. Io so come scrivere questo nel codice (C # e XAML), ma mi chiedo a quale livello dovrei mettere il codice responsabile.

Una parte di me mi dice che dovrebbe essere nella vista, perché è il codice in particolare per quella vista specifica. Non è generico e serve uno per usi:. Raggruppare i dati

D'altra parte penso che dovrei gestire nel ViewModel utilizzando un comando. Ci si sente, anche se, come se sto contaminare il mio ViewModel con Vista logica specifica.

Qualsiasi ligt che può essere versato su questo?

È stato utile?

Soluzione

Nella maggior parte della mia MVVM applicazioni cerco di responsabilità dividono in questo modo:

  • La vista deve solo eseguire una semplice definizione di dati per ViewModel pixel. Di solito questo si traduce in gran parte XAML e codice pochissimo dietro.
  • Il ViewModel dovrebbe svolgere logica view-specifico come raggruppamento ecc Spesso nemmeno più ViewModel per view. Si può avere un ViewModel principale che espone un elenco di sub-ViewModel per gruppo per la visualizzazione, ad esempio per implementare raggruppamento.
  • Se avete qualche logica che si applica a più di un viewmodel è probabilmente logica di dominio e dovrebbe andare in dominio del modello.

Quindi penso che il raggruppamento dovrebbe andare nel ViewModel.

Altri suggerimenti

Non c'è una risposta a questo. In realtà dipende lo scenario:

1) Se l'utente ha alcuna influenza sulla questione? Se non lo fanno, ed è un fisso di raggruppamento, mi piacerebbe pubblicare una proprietà con IGrouping e utilizzare la Dataservice o LINQ to farlo prima che entri la vista.

Si tratta in genere meno performante se raggruppamento nella vista, ma non è una scelta chiara. Se l'utente può selezionare un sacco di diversi gruppi, questo potrebbe essere un valore di pena di pagare per l'usabilità aggiunto ..

se l'utente ha una certa influenza sul raggruppamento mi piacerebbe associare a un ICollectionView esposto dal ViewModel. I supporti Visione generale, il filtraggio, l'ordinamento e la valuta e l'interfaccia ICollectionView è da System.ComponentModel quindi non si dovrà aggiungere un riferimento "gui" al progetto ViewModel. Anche il WPF DataGrid supporta l'interfaccia ICollectionView.

Se l'utente non ha alcuna influenza sul gruppo (i gruppi sono fissi) che avevo appena "pre" -Gruppo i dati nel modello. HTH.

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