Newsgroup: it.comp.dotnet
Titolo: WPF problema con l'update di entità

Salve a tutti
ho una tabella clienti visualizzata in una datagrid
Se devo modificare un cliente:
wndCliente wnd=new wndCliente();
tbClienti cliente=datagrid.SelectedItem as tbClienti;
wnd.DataContext=cliente;
bool? result=wnd.ShowDialog();
if(result==true)
   {
       datacontext.SubmitChanges();
       datagrid.ItemsSource=datacontext.tbClienti.ToList();
   }
wndCliente contiene due bottoni uno annulla con isCancel=true e uno
conferma con isDefault=true.
Le textbox hanno tutti la proprietà UpdateSourceTrigger impostata su
PropertyChanged.
Se modifico ad esempio il nome del contatto e poi clicco su annulla, i
cambiamenti non vengono propagati al db, ma la lista clienti contiene
il valore modificato.
Come evito questo comportamento?
Saluti
Fabio

 Come evito questo comportamento?
cos� su due piedi proverei a non impostare UpdateSourceTrigger  su 
PropertyChanged ma a fare il binding con una tua property "confirmed" 
che gestisci nel code behind (o nel viewmodel se segui questo approccio)
Oppure, analogamente, usare l'enum Explicit e aggiornare a mano nel code 
behind (o nel viewmodel) con updatesource()

 behind (o nel viewmodel) con updatesource()
Ci avevo pensato ma in caso di window molto popolate potrebbe essere
poco pratico.
Credo, tuttavia, che dovrò seguire una delle tue indicazioni.
Grazie per l'aiuto.
Fabio

 wrote:

Tu come gestisci questo genere di situazioni?
Ciao
Fabio


Attualmente mi sto sforzando di entrare il più possibile nell'ottica 
Model-View-ViewModel, dunque cerco di sfruttare il più possibile i 
binding a property definite nei viewmodel (che così diventano quasi dei 
codebehind ma restano aperti alla testabilità e permettono di mantenere 
un'indipendenza maggiore dalla view), dunque per la tua domanda, 
sceglierei la prima soluzione.
Più in generale, ti dico che andando in direzione mvvm mi è stato 
possibile, per esempio, cambiare completamente l'interfaccia di un 
componente da una basata su tabcontrol a una basata su treeview, 
mantenendo quasi intatti dei viewmodel che erano stati scritti per la 
prima, anche se adesso non hanno propriamente una loro view associata.
Comunque, se nel tuo lavoro/progetto sei ancora in uno stadio iniziale, 
ti consiglio di valutare l'utilizzo di qualche framework sovrastante il 
wpf: 
http://www.japf.fr/silverlight/mvvm/index.html
magari perderai un po' di tempo a sceglierlo e a capire come usarlo, ma 
io che sono andato avanti un po' a tentativi adesso mi ritrovo con 
strategie diverse usate per risolvere problemi simili, e il tutto è un 
po' disomogeneo e di difficile lettura:
prima mi sono sforzato di usare grandi templates customizzati, 
insistendo tanto su styles, triggers e quant'altro, lato xaml; poi mi 
sono buttato sui command, adesso mi sto spaccando per usare uno stesso 
modello di componente molto "mvvm compliant" per diversi componenti 
sparsi nel mio progetto... insomma, forse adesso so quali errori non 
rifarei, ma tornando indietro cercherei di "sposare" un framework.
Comunque qui nel newsgroup ci sono fior fior di persone che possono 
consigliarti molto meglio di me!
Ciao


Ti ringrazio, sei stato molto paziente.
Mi studio il tuo link.
Ciao
Fabio