Stavo cercando di creare un controllo comune che potrò riutilizzare sulle mie pagine: un AddressControl che ha Indirizzo1, Indirizzo2, Città, Stato, Zip, ecc ...Best practice WPF: i controlli personalizzati funzionano correttamente con il design MVVM?
Originariamente ho appena creato una classe (AddressEntity
) che conteneva tutti questi elementi e implementato INotifyPropertyChanged
. Ho incluso quella classe come DependencyProperty nel mio Code-Behind per AddressControl e l'ho usata come DataContext per i binding alle sue proprietà.
Quindi, qualcuno ha detto che il mio codice era brutto e dovrei esaminare MVVM. Guardando la cosa, suppongo che:
- AddressEntity.cs sarà solo un contenitore di dati (per esempio Address1, address2, etc.) ed i membri (cioè Clone, ToString, etc.)
- ho bisogno di qualche AddressViewModel per avvolgere il mio AddressEntity e fornire le modifiche PropertyNotification, convalida, ecc.
- Ho bisogno di avere una "vista" per questo.
Il problema è ogni esempio che abbia mai visto ha un UserControl come View e non un CustomControl. Prima di approfondire questo ...
- È possibile utilizzare MVVM + controlli personalizzati per questo esempio?
- È praticamente la stessa cosa (UserControl vs CustomControl) come la visualizzazione ad eccezione delle differenze primarie di UserControl vs CustomControl? Fondamentalmente, il mio CustomControl è davvero solo una vista?
Riferimenti: The Model-View-ViewModel (MVVM) Design Pattern for WPF
Le due risposte che seguono sembrano essere in contrasto con l'altro. Sono confuso ora ... soprattutto dal momento che la seconda risposta sembra più probabile, ma la prima risposta ha (finora 3 voti). –
Concordo con NVM. Ho anche sentito personalmente che Custom Controls e MVVM non possono andare bene insieme. Hai CC e UC nello stesso progetto ma non riesco a pensare di avere una VM per i miei CCwherea che hanno VM per UC ha senso. – akjoshi
@akjoshi Non vedo perché WPF e MVVM puri abbiano qualcosa a che fare l'uno con l'altro. In effetti, indipendentemente dal controllo personalizzato o dell'utente, non è necessario utilizzare MVVM e direi che non devi utilizzare MVVM quando crei un utente o un controllo personalizzato. MA usando questi controlli allora sì, MVVM è un bel modo di usarli. Penso che sia facile distinguere tra "Ora faccio business logik e uso MVVM" e "Ora creo un controllo e non ho mai sentito parlare di mvvm". Ad esempio, abbiamo creato un controllo grafico completo con connessione a nodi, ecc., Che sono tutti controlli personalizzati, ma l'utilizzo di questo controllo avviene principalmente tramite viewmodels. – dowhilefor