Se TL; DR: vedere l'ultimo paragrafo.Separazione di viste, comando di presentazione (Testo, Icona) e logica di comando (Esegui, CanExecute)
Pure WPF "suggerisce" l'inserimento di presentazioni (controlli, testo, icone) in viste e la logica di comando (Esegui, metodi CanExecute) in code-behind. Oltre a mettere la logica in entrambe le viste (CommandBindings
) e code-behind è una pratica disapprovata, non aiuta affatto con Duplicazione XAML: testo, icone, icone grandi, suggerimenti e numerose altre proprietà devono essere duplicate ogni volta che viene utilizzato il comando: per il menu principale, per il menu di scelta rapida, per il pulsante della barra degli strumenti, per il pulsante della barra multifunzione e altri controlli.
Sembra che il primo problema (veramente separando le viste e la logica) sia risolto da DelegateCommand
, RelayCommand
e approcci simili. La logica di comando viene spostata in ViewModels (o Controller in caso di MVVMC), code-behind è pulito, non CommandBindings
e altre assurdità nelle visualizzazioni.
Tuttavia, non riesco a trovare una soluzione comunemente accettata per il problema della duplicazione della presentazione. Voglio separare la presentazione del comando (testo, icone) e la logica di comando (Execute
, CanExecute
). Tutto il codice che ho trovato può mettere la presentazione in codice (creando un RoutedCommand
con proprietà aggiuntive come Label
e Icon
) o inserisce il codice nella presentazione (cioè, gestori in viste e code-behind). Neanche a me piace. Penso che la presentazione dovrebbe essere completamente in XAML e il codice dovrebbe essere completamente in CS (in ViewModel o Controller).
Domanda: come separare viste (XAML con controlli che i comandi di riferimento), la presentazione di comandi (etichette, icone ecc per ogni comando) e la logica di comandi (codice C# per Execute
, CanExecute
ecc in ViewModels o Controller)?
Già due voti ravvicinati? E zero commenti? La domanda è inafferrabile o mi sono perso qualcosa? Se votate per chiudere, lasciate almeno un commento, per favore. Non posso imparare se non mi dici cosa ho fatto di sbagliato. – Athari
Leggi la descrizione "non costruttiva" nelle FAQ - "questa domanda probabilmente solleciterà discussioni, discussioni, sondaggi o discussioni estese". Con lo stesso token, Stack Overflow non è un buon posto per chiedere "come devo costruire il mio software?" domande. –
@JeanHominal Il modo in cui lo vedo, non ho chiesto come costruire il mio software, ho chiesto un problema che penso sia * molto comune *, considerando quanto codice ho visto dove questo problema non è risolto , anche nel codice di Microsoft. E a giudicare dai voti (5 +1 voti da 20 punti di vista), non sono l'unico a voler trovare una soluzione. – Athari