2009-05-22 40 views
6

Come fornire un annullamento/ripristino utilizzando i binding in WPF?Annulla in binding WPF

ad es. Si implementa una vista dettagli principale con associazioni. Dopo aver modificato le modifiche sono state salvate automaticamente utilizzando l'associazione. Quindi si desidera annullare le modifiche.

C'è qualcosa di pronto all'uso nell'associazione per WPF? WPF fornisce alcune strutture o interfacce?

Questa domanda non riguarda come implementare l'annullamento/ripristino utilizzando gli stack.

risposta

5

Dai un'occhiata all'interfaccia IEditableObject. Ti consente di scattare un'istantanea dell'oggetto che la implementa e quindi di tornare a quella istantanea se necessario.

+0

WPF usa l'interfaccia IEditableObject, cioè invoca i suoi metodi? –

+0

Dipende dal particolare controllo che si sta utilizzando. Ad esempio, il controllo MS DataGrid lo farà. –

1

A che cosa si collega?

Se si associa un DataSet a un database, è possibile annullare le modifiche utilizzando il metodo DataSet.RejectChanges(), a condizione che non sia già stato chiamato DataSet.AcceptChanges().

+0

Che dire di legame generale, ad es. a un oggetto derivato da DependencyObject o da un binding control-to-control? –

+0

Come dice Kent se l'oggetto implementa l'oggetto IEditableObject in cui ci si trova quidi ma, in caso contrario, è necessario farlo manualmente. –

1

È possibile che il quadro di annullamento monitorato sia utile. http://muf.codeplex.com/

Non utilizza il modello di comando "top down", ma monitora le modifiche mentre si verificano e consente di inserire un delegato nello stack di annullamento che annullerà la modifica.

Nel tuo caso, se stai vincolando a un modello/viewmodel sottostante, puoi collegare il framework per acquisire queste modifiche e quindi annullarle/ripristinarle secondo necessità. Se il modello implementa INotifyPropertyChanged e utilizza ObservableCollections, dovrebbe riflettere automaticamente le azioni eseguite sul modello, incluse le azioni di annullamento/ripristino.

È possibile trovare ulteriori informazioni e documentazione sul sito di codeplex allo http://muf.codeplex.com/.