Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
To begin moving the Sonnet's application into a multipage application using pivot with persistence, we've started out and created a new solution called Sonnets Plus flat file. And we've copied over some of the things from the Sonnets app that we built previously. We've got the original Shakespeare Sonnets in CML form. We've added two images. One is the star that shows up down in the application bar so that we can choose a favorite. And we've also added a yellow version of that for use on the page which works in both the light theme and the dark theme. So we couldn't just use this image here, the appbar.favs.rest.png, because in the light theme, it wouldn't show up.
When you use an icon from the Icons directory in the Application bar, the operating system automatically switches it when you change light and dark themes. But it doesn't, of course, change it on your application content area, because you want to have full control over that. So we took that, filled it in with yellow, and named it Favorite. We've also copied over the About Page so that we don't have to do that all over again. And now, what we're going to do is look at, we've also added a couple of references. Because the way we're going to store our list of sonnets is we're going to store it in an isolated storage file as a flat XML file.
And in order to do that, we brought in system.xml, system.xml.link and system.xml.serialization using isolated storage in this example. Because it works with both Windows Phone 7 and Windows Phone 8. If you're targeting Windows Phone 8 only, you should investigate the windows.storage name space because that's the one that's compatible with Windows 8. And will be the one that'll be used exclusively on Windows phone moving forward in the next generations of Windows phone. We've also, because we're going to be building two versions of this app, one that uses a flat file and one that uses the on-board SQL CE database.
We've made a couple of minor changes to the WMAP manifest, changing the title of the app to Sonnets plus FF. And changing the title of the large background icon when you pin to the homepage to Sonnets plus FF. Alright, so the first thing we're going to do is we're going to add a class which is going to hold our data that we're going to persist. So, we're going to add a new class and we're going to call it Sonnets. And in Sonnets, we're just going to create a collection of properties.
Because if we're going to be serializing and de-serializing this information back and forth with XML. So we've added an ID property, which will allow us to connect to the sonnet by number. Which is different than the title property, which is the sonnet number in Roman numerals. We've also added an OtherLines, a FirstLine property, which is the first line that shows up in that list box, and an OtherLines property, which is all the rest of our sonnet. And then finally, a Boolean to say whether it's a favorite or not. So, the way we're going to do this in the flat file version is we're actually going to read and write all 154 sonnets to and from XML.
And when we want to create our list of favorites, we'll be looking at the Boolean flags iterating through the list of sonnets to create a subset of our list. Save that. Now, we're going to come and add some code into the main app C# file. So, look at what we did here. We first of all added some additional using statements, or System.IO, System.IO.IsolatedStorage, and System.Xml.serialization. That's, so that we can serialize the data back and forth using those stream readers and writers and text readers and writers is why we need the System.IO.
And the System.IO.serialization is so that we have serialize and de-serialize against the XML model. So, the name of our "database" here in isolated storage is going to be SonnetsWithFavorites.xml. And, in the app constructor, after we go through all the standard template stuff, we then say we want to look and see if the "database" file exists. And if not, we're going to prepopulate it with the contents of that ShakespeareSonnet.xml which is in a format that is not exactly what we want to use in this app. And so, instead of just reading that and creating the view module each time, we're actually going to do it on a one time basis.
Read that and create instances of our sonnet class so that we can shuffle it back and forth. Isolated storage is essentially all the read write file system that exits on the Windows Phone device for you to save and, and load files. The reason it's called isolated storage is because the set of files and folders. For each app is isolated in a sandbox so that all of your files in sonnets plus are separate from all of the pictures in the picture hub, are separate from all of the mail stored by the mail application.
There is no way for one app to see the contents of isolated storage for another app. In order to get access to the isolated storage directory for your app, you have to use this IsolatedStorageFile.GetUserStoreForApplication. So we go and get that, we do it in a using statement so that it actually gets disposed of at the end of the access to isolated storage. Because the isolated storage implements disposable, and this is a good way to have your app not leak memory. So, we go get access to the user store for application, that's the isolated storage.
And from there we can create files, delete files. First, think we're going to do is use file exist to see whether or not our database file exist out there because we only want to do this once. So, we look and see if it exists. If it doesn't, we're then going to go and create a file. So you use OpenFile, pass in the name, and use System.IO.fileMode.Create, and you get a stream. Then, we have to have some data to put into that stream, and so we have a modified version of the method we had in our view model before that loads that the Shakespheresonets.xml file into a observable collection of item view model instances.
We'll look at that in just a second, but that essentially looks like what our view model looked like before. And now, we have this observable collection of item view model instances and we use the standard XML serializer techniques to write it out to the file. We create a serializer from that, create a text writer from the stream, serialize it out and close everybody down. Now, we have this file in isolated storage that anytime we need to load up the data to put into a list box or to add a favorite or delete a favorite we can use that file. This low database from XML, as I said, is essentially identical to the implementation we had in the main view model of the basic Sonnets app. The difference being instead of taking the items and adding them to the items collection of the view model, we create a new observable collection of the items. And at the end, as we create each one, we simply add it to that items list. We also go through and prepopulate the two new things that we've added to the view model, the sonnet ID and the, it's favorite property. We set it's favorite property to False.
Remember, this is happening only when we're loading the static data from ShakespeareSonnets.xml. So, we don't have any favorites yet. And we also set up the sonnet number, so that we can access things in this list by index. So, now we've looked at the solution that we've got. We added the sonnets class so that we have a place to put our data that we're going to store in isolated storage. And we've modified the app.zemble.cs file to include a 1 time code, to transfer our static data from the ShakespeareSonnets.xml file into our file and isolated storage so that the rest of our app has a known state to begin.
Get unlimited access to all courses for just $25/month.Become a member
61 Video lessons · 104518 Viewers
56 Video lessons · 116436 Viewers
71 Video lessons · 85645 Viewers
131 Video lessons · 40992 Viewers
Access exercise files from a button right under the course name.
Search within course videos and transcripts, and jump right to the results.
Remove icons showing you already watched videos if you want to start over.
Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.
Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.