Press "Enter" to skip to content

Creare un’applicazione WPF per gestire Dati su un database SqlServer – parte 6 La classe Author

Arrivati a questo punto dobbiamo creare l’interfaccia per gestire gli Autori, questo significa che dobbiamo avvicinarci alle classi che Gestiranno i dati, le faremo una alla volta, considerato che per generare la UI di gestione dobbiamo avere un oggetto dati che possa essere parte del pattern MVVM, partiamo proprio scrivendo la classe che mappa la tabella autori ad uso di tale pattern.

Nella teoria di MVVM, questa classe fa parte del Model ed è un Entity, un oggetto contenente dati. quindi andiamo a definirla.

Per prima cosa procediamo a generare una nuova cartella ove inseriremo le classi dati.

Sul progetto WpdPubs, apriamo il menu contestuale con il tasto destro e selezioniamo Add -> New Folder.

Ci viene creata una cartella chiamata “New Folder”  (Nuova Cartella) che rinominiamo Entities.

In questa cartella genereremo la classe AuthorItem e le eventuali ulteriori classi di supporto necessarie all’applicazione.

 

Premendo il tasto Add la classe verrà generata all’interno della cartella.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace WpfPubs.Entities
{
	class AuthorItem
	{
	}
}

E’ una classe molto scarna, a cui manca una cosa fondamentale, la definizione che stabilisce la visibilità della classe, che così come scritta è private, ovvero visibile solo a se stessa. Non so bene perché questa sia la scelta di chi ha creato il template, ma è uno dei motivi per cui ho creato un template personalizzato da usare.

La creazione di Template per gli oggetti di un progetto non è oggetto di questa serie di articoli, perciò faremo le modifiche opportune e inizieremo a generare le Property che rappresentano i campi della classe.

 

Per prima cosa, rendiamo la classe Visibile con l’attributo public, aggiungiamo poi lo using del Namespace System.ComponentModel, che ci permette di implementare l’Interfaccia INotifyPropertyChanged. Mi aspetto che chi legge e prova a creare questo progetto sappia cos’è un interfaccia (se no vi prego di chiedere e scrivo un articolo in merito).

L’interfaccia che implementeremo in questa classe, INotifyPropertyChanged è un interfaccia che permette la notifica della variazione delle Property della classe ed è automaticamente intercettabile da parte dei componenti visuali WPF per aggiornare il proprio stato automaticamente. E’ quindi l’interfaccia necessaria a permettere di implementare la parte  “Data Driven” di MVVM. Ne vedremo gli effetti in seguito, ora vediamo cosa fare per implementare l’interfaccia, che come vedete dalla figura precedente, è segnata con un errore perché manca la sua implementazione.

Abbiamo una serie di campi principalmente di tipo testo, fatto salvo il campo contract che è un bit, il corrispondente in SqlServer del campo boolean di C#. Per ciascun campo creiamo una Property che lo mapperà sulla classe.

 

/// <summary>
/// ID Autore
/// </summary>
public const string FLD_AuthorID = "AuthorID";
 
/// <summary>
/// ID Autore
/// </summary>
private string mAuthorID;
 
/// <summary>
/// ID Autore
/// </summary>
public string AuthorID
{
	get
	{
		return mAuthorID;
	}
	set
	{
		mAuthorID = value;
		OnPropertyChanged(FLD_AuthorID);
	}
}

Per ogni property definiamo una costante con il nome della property che poi utilizzeremo per sollevare l’evento PropertyChanged, che provvederà ad aggiornare il valore in binding sui controlli WPF.  Generiamo anche una variabile privata per il valore ed infine la property che restituisce o riceve il valore della property e solleva l’evento OnPropertyChanged quando la Property viene modificata.

Listo le Property con i loro nomi:

  • AuthorID = Identificatore univoco dell’Autore
  • AuthorLastName = Cognome dell’autore
  • AuthorFirstName = Nome dell’autore
  • Phone = Numero di telefono
  • Address = Indirizzo
  • City = Città
  • Zip = Codice di avviamento postale
  • State = Stato (il db riguarda gli USA)
  • Contract = Flag che indica se l’autore ha un contratto con la casa editrice. 

Oltre alle property quello che io implemento sempre perché è utile per il debug, è il metodo ToString. Tale funzione, che tutti ereditano (e possono modificare) dalla classe Object, da cui tutte le classi di .net sono derivate, ha il compito di generare una stringa che rappresenta il contenuto dell’oggetto.

public override string ToString()
{
	StringBuilder sb = new StringBuilder();
	sb.AppendFormat("({0}) {1} {2} {3} {4}"AuthorIDAuthorFirstNameAuthorLastNamePhoneContract"Has contract" : "No contract");
	sb.AppendLine();
	sb.AppendFormat("{0} {1} {2} ({3})"AddressCityZipState);
	sb.AppendLine();
	return sb.ToString();
}

Questo metodo visualizza su 2 righe tutti i dati che sono inseriti all’interno della classe.

Con questo per ora abbiamo terminato la generazione della classe che rappresenta una riga della tabella Authors. Al prossimo step creeremo la classe che si interfaccia con il database.