c# - saving state between pages when creating a windows 8 app -
i've been following create first windows store app using c# or visual basic tutorials provided microsoft having problems saving state when navigating between pages.
create first windows store app using c# or visual basic
part 3: navigation, layout, , views
basically i've noticed if navigate main page photo page select photo, navigate main page , go photo page again doesn't remember photo selected. i'm using following code navigate photo page main page.
private void photopagebutton_click(object sender, routedeventargs e) { this.frame.navigate(typeof(photopage)); } in photo page loadstate method is
protected async override void loadstate(object navigationparameter, dictionary<string, object> pagestate) { if (pagestate != null && pagestate.containskey("mrutoken")) { object value = null; if (pagestate.trygetvalue("mrutoken", out value)) { if (value != null) { mrutoken = value.tostring(); // open file via token stored when adding file mru list. windows.storage.storagefile file = await windows.storage.accesscache.storageapplicationpermissions.mostrecentlyusedlist.getfileasync(mrutoken); if (file != null) { // open stream selected file. windows.storage.streams.irandomaccessstream filestream = await file.openasync(windows.storage.fileaccessmode.read); // set image source bitmap. windows.ui.xaml.media.imaging.bitmapimage bitmapimage = new windows.ui.xaml.media.imaging.bitmapimage(); bitmapimage.setsource(filestream); displayimage.source = bitmapimage; // set data context page. this.datacontext = file; } } } } } the photo page save state is
protected override void savestate(dictionary<string, object> pagestate) { if (!string.isnullorempty(mrutoken)) { pagestate["mrutoken"] = mrutoken; } } i've noticed pagestate null when navigated to. ideas?
i did tutorial , found 1 solution save state across pages navigation.
first, override onnavigatedfrom in order save file token state frame:
protected override void onnavigatedfrom(navigationeventargs e) { base.onnavigatedfrom(e); var state = suspensionmanager.sessionstateforframe(this.frame); state["mrutoken"] = mrutoken; } override onnavigatedto in order load token state:
protected override void onnavigatedto(navigationeventargs e) { base.onnavigatedto(e); var state = suspensionmanager.sessionstateforframe(this.frame); if (state != null && state.containskey("mrutoken")) { object value = null; if (state.trygetvalue("mrutoken", out value)) { // same code loadstate retrieve image } } } in fact, wrote function retrieve image can used in both loadstate , onnavigatedto methods.
private async void restoreimage(object value) { if (value != null) { mrutoken = value.tostring(); // open file via token stored when adding file mru list. windows.storage.storagefile file = await windows.storage.accesscache.storageapplicationpermissions.mostrecentlyusedlist.getfileasync(mrutoken); if (file != null) { // open stream selected file. windows.storage.streams.irandomaccessstream filestream = await file.openasync(windows.storage.fileaccessmode.read); // set image source bitmap. windows.ui.xaml.media.imaging.bitmapimage bitmapimage = new windows.ui.xaml.media.imaging.bitmapimage(); bitmapimage.setsource(filestream); displayimage.source = bitmapimage; // set data context page. this.datacontext = file; } } }
Comments
Post a Comment