Βάθος δεν υπάρχει, τα πράγματα είναι πολύ απλά. Το θέμα είναι ότι έχεις καιρό να ασχοληθείς. Υλοποιείς ένα, δύο ή και περισσότερα interfaces ανάλογα με αυτό που θέλεις να κάνεις και τα υπόλοιπα τα αναλαμβάνει το DataBinding. Και αν στο project που έχεις σκοπό να κάνεις χρησιμοποιείς και controls τρίτων κατασκευαστών τότε μπορεί να γλυτώσεις και μερικές υλοποιήσεις παραπάνω.
Γράψε implementation για το INotifypropertyChanged & IDataErrorInfo και για τα υπόλοιπα βλέπεις και κάνεις. Αυτό είναι το βασικό σενάριο που όπως είπα θα σε εξυπηρετήση στο μεγαλύτερο ποσοστό των περιπτώσεων. Όσο για το IEditableObject γνώμη μου είναι πως είναι ένα προβληματικό Interface. Θα συνιστούσα στην περίπτωση αυτή να φτιάξεις ένα δικό σου μηχανισμό για να κρατάς της original τιμές των πεδίων σου. Θα αναφέρω ένα κοινό παράδειγμα για να καταλάβεις για πιο λόγο το λέω αυτό.
Ας υποθέσουμε ότι έχουμε ένα grid το οποίο έχει κάποιες εγγραφές. Κάθε φορά που κάνεις navigation στα rows του grid ο μηχανισμό DataBinding καλεί την BeginEdit & EndEdit για κάθε row στο οποίο πας και από το οποίο φεύγεις. Αυτό σημαίνει πως αν κάνεις μία αλλαγή σε ένα row και φύγεις από το συγκεκριμένο row ο μηχανισμός DataBinding θα καλέσει την EndEdit οπότε θα θεωρήσει πως οι τρέχουσες τιμές των πεδίων σου είναι και οι αρχικές. Αυτό όμως δεν είναι το ζητούμενο. Το ζητούμενο είναι αν ο χρήστης θελήσει στην πορεία για ένα row να αναιρέσει τις αλλαγές που έχει κάνει θα θέλει να δει στο συγκεκριμένο row τις τιμές που διάβασε από την βάση ή αυτές που υπήρχαν την τελευταία φορά που πάτησε αποθήκευση κάτι όμως που με το IEditableObject δεν γίνεται. Βέβαια στην περίπτωση αυτή θα μπορούσε κάποιος να αναφέρει τον μηχανισμό του Refresh. Δηλαδή αν θέλει ο χρήστης να αναιρέσει αλλαγές που έχει κάνει στο Grid να πατήσει το Refresh και όχι το Undo ας πούμε. Υπάρχει όμως διαφορά μεταξύ Refresh και Undo. Στο σενάριο όπου η εφαρμογή είναι Single User καμία αλλά σε Multi user υπάρχει.
Επίσης σχετικά με το IDataErrorInfo όλα τα controls είναι σε θέση να κάνουν ένα validation σε επίπεδο Data Type. Δηλαδή εκεί που ο μηχανσιμός περιμένει ημερομηνία να μην περάσουμε αλφαριθμητικό, όμως όπως είναι φυσικό δεν μπορούν να κάνουν BusinessValidation. Δηλαδή θέλω για παράδειγμα οι ημερομηνίες που θα δίνω στο χι πεδίο να είναι πάντα μελλοντικές ή το email που γράφω να είναι σωστό ή οτιδήποτε άλλο.
Αυτά.