c# - Preventing a Passed Model from Updating when the User Closes a Window in MVVM WPF -


this question has answer here:

i have window datagrid companies in it. user clicks 'edit', new window opens , selectedcompany passed modifywindow. works expected, , if user clicks save on modifywindow selectedcompany updated on sql , changed reflected in datagrid on main companies window.

however, if user makes changes company in modifywindow , not click save instead closes window using cross (to me saying want throw away edit) company still updated on datagrid. here code:

from companiesviewmodel:

private void showeditcompanywindow() {     var modifycompanyviewmodel = new modifycompanyviewmodel(selectedcompany);     modifycompanyviewmodel.returnmodifiedcompany += loadmodifiedcompany;     messenger.default.send(modifycompanyviewmodel); }  private void loadmodifiedcompany(company modifiedcompany) {     var existingcompany = datagridcompanies.firstordefault(c => c.id == modifiedcompany.id);     var = datagridcompanies.indexof(existingcompany);     datagridcompanies[i] = modifiedcompany;      var existingsearchcompany = allsearchcompanies.firstordefault(s => s.id == modifiedcompany.id);     var x = allsearchcompanies.indexof(existingsearchcompany);     if (existingsearchcompany != null)     {         existingsearchcompany.name = modifiedcompany.name;         existingsearchcompany.town = modifiedcompany.town;         allsearchcompanies[x] = existingsearchcompany;     }      selectedcompany = modifiedcompany;      searchcompanyview = collectionviewsource.getdefaultview(allsearchcompanies) collectionview;      application.current.mainwindow.activate(); } 

from modifycompanyviewmodel:

private async void processcompany(window window) {     var waitview = new waitview     {         owner = application.current.windows.oftype<window>().firstordefault(x => x.isactive)     };     waitview.show();      if (await editcompany())     {         returnmodifiedcompany(selectedcompany);         closewindow(window);     }      waitview.close(); } 

the datagrid on companiesview:

<datagrid grid.row="1" x:name="companiesdatagrid" margin="5"              itemssource="{binding datagridcompanies}"             selecteditem="{binding selectedcompany}">     <datagrid.columns>         <datagridtextcolumn header="name" width="*" binding="{binding name}"/>         <datagridtextcolumn header="town" width="*" binding="{binding town}"/>         <datagridtextcolumn header="telephone" width="*" binding="{binding telephone}"/>     </datagrid.columns> </datagrid> 

i'm new mvvm , i'm thinking don't have updating of company in datagridcompanies mvvm handle me. bigger issue though how selectedcompany still changes in datagrid though have closed modify window , not want commit. have tried binding closing event on modify window , storing unmodified company , return that, company in datagrid still changed regardless.

you example implement ieditableobject interface in company class , call canceledit() method when window closed.

the beginedit() method should store "old" property values, e.g.:

string _oldname;  public void beginedit() => _oldname = _name;  public void canceledit() => name = _oldname;  public void endedit() => _oldname = null; 

Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -