Implementare INotifyPropertyChanged su classi Entity Framework generate

Ho un DB SQL e sto implementando un’interfaccia utente WPF per aggiornarlo. Se utilizzo EF5 per generare le classi dal DB, come posso implementare INotifyPropertyChanged sulle classi e proprietà generate in modo da potermi facilmente associare con l’interfaccia utente? C’è un modo semplice per raggiungere questo objective?

Grazie

Se si segue il modello MVVM consigliato per WPF, è ansible trattare le classi generate come Modello e quindi scrivere wrapper ViewModel che implementano INotifyPropertyChanged. Le classi ViewModel accedono alle classi DB ed espongono le proprietà che è ansible associare all’interfaccia utente in XAML.

Come notato nel tuo commento, questo può comportare un sacco di lavoro sulla scrittura del codice boilerplate, ma ci sono alcuni modi per affrontarlo. Vedi questa domanda per alcune idee.

Sebbene in un primo momento si lavori di più, il pattern MVVM può sicuramente dare i suoi frutti nel lungo periodo se è necessario eseguire una formattazione o elaborazione intermedia o se è necessario modificare le classi del database senza influire sull’interfaccia utente.

Dovevo fare lo stesso di recente, ma con Winforms. Se non si desidera seguire il modello MVVM come suggerito da bde, è ansible modificare il modello t4 per implementare INotifyPropertyChanged sulle entity framework generate.

Questa risposta mi ha aiutato: https://stackoverflow.com/a/12192358/1914530

C’è un pacchetto NuGet chiamato PropertyChanged.Fody che rende l’aggiunta di INotifyPropertyChanged alle proprietà di una class davvero semplice. Una volta installato il pacchetto, aggiungi l’attributo [ImplementPropertyChanged] a qualsiasi class o class parziale e il pacchetto aggiungerà INotifyPropertyChanged per te.

Ecco un semplice esempio del suo utilizzo;

 using PropertyChanged; [ImplementPropertyChanged] public partial class Order { } 

Vedi GitHub per ulteriori informazioni.

È ansible modificare il modello EF (file .tt) per generare la proprietà PropertyChanged sulle proprietà o (un po ‘rischioso :)) per modificare le classi generate. L’ultimo è un po ‘rischioso, perché se si rigenera il modello, tutte le modifiche andranno perse. Quindi forse la variante con le classi wrapper o la modifica del template (un po ‘dura: S) sono le migliori.

Rendi tutte le tue classi generate da EF ereditate da una class che implementa l’interfaccia INotifyPropertyChanged (usando le classi parziali non generate che probabilmente hai già definito). Aggiungi un metodo a questa class base, che solleva l’evento PropertyChanged con una stringa vuota come PropertyName . Quindi, ogni volta che si chiama questo metodo su un’istanza di class generata da EF, tutte le sue proprietà modificate verranno aggiornate nell’interfaccia utente di WPF.