I'm working in Windows Phone 7, but I suppose the question may be Silverlight in general (not .NET though, as ISerializable
doesn't exist in Windows Phone as suggested in this answer).
I have an number of objects I create at run time. They will mostly always be the same, except for a few properties.
So I would have as an object:
Public Class Article
Public Property Title As String
Public Property Author As String
Public Property HasBeenViewed As Boolean
Public Property DateViewed As Date
Public Property IsPriorityArticle As Boolean
End Class
I'd like to be able to write this as:
<DataContract()>
Public Class Article
<IgnoreDataMember()> _
Public Property Title As String
<IgnoreDataMember()> _
Public Property Author As String
<DataMember()> _
Public Property HasBeenViewed As Boolean
<DataMember()> _
Public Property DateViewed As Date
<DataMember()> _
Public Property IsPriorityArticle As Boolean
End Class
I have a lot of article objects to load at startup. Note: Articles that are loaded at startup are the only articles - there are never any new articles or any articles deleted. The only things that are changed in the Article
object is IsPriorityArticle
, HasBeenViewed
and DateViewed
. The rest of it is static.
I load these articles into a List(Of Article)
and that becomes my data source for binding. As the user views the articles, it logs when it was last viewed and that date. IsPriorityArticle
may have a true or false value that can be changed by the user - the end user can mark if it is considered an important article (in which case it will show up in another page of priority articles) or to unmark it as false. If so, that new value needs to persist between sessions.
I have about 250 articles. I create these all on start up (again, there will never be more or less articles).
Initialized values sample:
Public Shared Property MyArticles As IEnumerable(Of Article)
Private Sub Application_Launching(ByVal sender As Object, ByVal e As LaunchingEventArgs)
Dim listOfArticles As New List(Of Article)
With listOfArticles
.Add(New Article With {.Title = "The Internet", .Author = "John", _
.IsPriorityArticle = False})
.Add(New Article With {.Title = "The World", .Author = "Jim", _
.IsPriorityArticle = False})
.Add(New Article With {.Title = "The Universe", .Author = "John", _
.IsPriorityArticle = True})
.Add(New Article With {.Title = "The Atom", .Author = "Jim", _
.IsPriorityArticle = True})
End With
MyArticles = listOfArticles
End Sub
(BTW, I know I don't need the line continuation character anymore, but this site won't format code without it)
Notice the last 2 - they have .IsPriorityArticle = True
. That is the initialized value when the app is first launched - if the user never changes it, it will always be .IsPriorityArticle = True
but if they change it to False
, that should persist in IsolatedStorage to the next session.
So I've toyed around with trying to get this to serialize properly and can't get anything to work. I don't know how to load only the <DataMember>
properties from IsoStore and not the rest.
Does anyone know how to do this so that my MyArticles As IEnumerable(Of Article)
will use my initialized values and then check for any <DataMember>
properties that need to be updated?
Or am I down the wrong path on this?