Domanda

Ho una pagina WPF che contiene una casella di riepilogo e un frame.Nel frame sono caricate varie pagine determinate dalla selezione all'interno della casella di riepilogo.

Ogni pagina all'interno della cornice ha una varietà di caselle di input diverse e ha un pulsante Salva Annulla.Quando si fa clic sul pulsante Salva, è necessario che il contenuto venga salvato nel database e che la casella di riepilogo nella pagina principale venga aggiornata per riflettere i nuovi dati.

Salvare i dati è semplice, ma come posso avviare un aggiornamento sul contenuto della casella di riepilogo nella pagina principale quando la chiamo dalla pagina all'interno del frame?

Devo in qualche modo essere in grado di accedere ai controlli delle pagine principali per farlo.

Qualche idea?

È stato utile?

Soluzione

È tecnicamente possibile raggiungere il controllo genitore e farsi strada con i controlli in esso contenuti, ma rende il codice molto difficile da mantenere perché se si modifica la struttura del controllo genitore, si rompe il codice in tutti i contenuti pagine.Sarebbe considerato un progetto molto strettamente accoppiato ed è spesso fragile.

Un design in qualche modo più pulito sarebbe fare in modo che le classi della pagina avviino un evento quando viene premuto il pulsante Salva.Quindi il frame principale può affondare l'evento e aggiornare tutto ciò che sa deve essere aggiornato dopo un'operazione di salvataggio.È più facile da mantenere perché i tuoi componenti sono accoppiati in modo più flessibile, ma inserisce comunque molta conoscenza del database nei componenti della GUI.Una progettazione di questo tipo potrebbe essere appropriata per un'app relativamente semplice sulla quale non prevedi di eseguire molta manutenzione o miglioramenti futuri.

Il modello di progettazione che preferisco (come fanno molti sviluppatori) è isolare la gestione del database e la logica di business all'interno di una o più classi con una semplice interfaccia programmatica che può essere testata facilmente.I componenti della GUI sono mantenuti quanto più semplici e sottili possibile, in modo che possano essere facilmente modificati se necessario.Questo è spesso chiamato modello Model-View-Controller ma ci sono altri nomi per questo.Nel tuo esempio, la classe "controller" che incapsula la logica aziendale avrebbe proprietà e metodi per leggere e impostare le informazioni e un metodo "Salva" o "Commit" che scrive le modifiche in un database.Una volta completato il salvataggio, verrà generato un evento "Saved" o "Changed" che notifica a tutti i controlli ("viste") che visualizzano informazioni che le informazioni sono cambiate e si aggiorneranno in base ai nuovi valori delle proprietà della classe del controller .

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