Domanda

Alla domanda StackOverflow In che modo è possibile utilizzare i convertitori WPF in un modello MVVM? Ho appreso che i convertitori di valore non devono essere utilizzati nel modello MVVM poiché la funzionalità di un convertitore di valore deve essere gestita dal ViewModel stesso .

Questo ha senso.

Ma ricordo di aver letto che non dovresti esporre gli elementi XAML alla vista , ma invece esporre solo raccolte di dati che la vista quindi lega e visualizza utilizzando i modelli di dati.

Tuttavia, i convertitori sembrano piuttosto potenti (ad es. poiché vengono utilizzati in Demo del modello MVVM , vedere il & Quot; Esempio di Messenger & Quot; dopo averlo decompresso) in quanto possono convertire oggetti in oggetti , ad es. Messaggio di oggetti a oggetti FlowDocument o oggetti cliente in oggetti visibilità o oggetti stato personalizzati in immagini, ecc.

Quindi, se un ViewModel sta per assumere la funzionalità di un convertitore di valore , dovrà esporre elementi e proprietà XAML come StackPanel, Visibilità, Colore, FlowDocument, ecc., destra?

Qualcuno vede qualche motivo per cui un ViewModel non dovrebbe esporre questi ricchi oggetti XAML come fanno i Convertitori di valori?

È stato utile?

Soluzione

Perché allora ciò limita il ViewModel da usare solo con una rappresentazione visiva specifica. Una volta che ViewModel emette XAML, inserisce i contenuti di progettazione nel dominio di uno sviluppatore. Ciò significa che il designer che utilizza Expression Blend non può modificare le risorse di progettazione e che il flusso di lavoro del designer / sviluppatore è interrotto. Mantenere XAML nella pagina e utilizzare i convertitori di valore con la modellazione dei dati mantiene il design separato dal codice.

Quando ViewModel espone XAML specifico, limita anche che ViewModel venga utilizzato solo in quella specifica istanza e lo rende meno riutilizzabile.

Altri suggerimenti

Non dimenticare che puoi usare anche DataTemplates. Riesco a vedere un po 'di senso nel mantenere ValueConverters fuori da MVVM, ma DataTemplates è tutto sulla trasformazione degli oggetti in GUI.

ViewModel può esporre altri oggetti (ad esempio ViewModels nidificati) alla GUI e la GUI può utilizzare <DataTemplate DataType="{x:Type SubViewModel}">... per mappare tali oggetti sulla GUI.

  

Qualcuno vede qualche motivo per cui un ViewModel non dovrebbe esporre questi ricchi oggetti XAML come fanno i Convertitori di valori?

Assolutamente, perché mina tutti gli obiettivi di MVVM:

  1. Non sei più unità testabile, almeno non facilmente.
  2. Non hai più separazione tra logica (vista modello) e presentazione (vista). Pertanto, designer e sviluppatori non possono collaborare facilmente.
  3. La manutenzione del codice è più difficile perché hai mescolato le preoccupazioni insieme.

Se vedessi un modello di vista restituire una vista, non lo classificherei nemmeno come MVVM.

Penso che un'idea di mvvm / mvc / mvp ecc. sia quella di isolare il codice GUI in un file / classe. Se lo fai, puoi passare a qualche altra interfaccia utente senza riscrivere gli altri oggetti? Penso che se passi intorno ad oggetti specifici di WPF la risposta è no. È un giudizio di valore che dovrai prendere per te stesso.

Non esiste una regola assoluta al 100% che funzioni per questo o molti altri concetti quando li si discute senza la prospettiva del perché la mente della comunità si sia spostata così come è andata in questa direzione. Non c'è verità o scienza "presunta" nella "saggezza convenzionale", indipendentemente da quanto sia nuova o avvincente al momento.

In altre parole, fai solo del tuo meglio con la tua squadra come se fossi il tuo bene, il tuo essere già abbattuto molto più nelle preoccupazioni umane di qualsiasi cosa reale come questa.

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