私は Windows ストア アプリに取り組んでおり、デシリアライズできた xml ファイルに DTO クラスをシリアライズする際に問題が発生しています。データをバインドして一部のデータを変更した後、DTO クラスをシリアル化して、再度シリアル化解除したときにそれらの変更が反映されるようにする方法がわかりません。私がやっていることは、アプリにログインした後Data
、次のページで使用するオブジェクトも渡すことItemsListView
です。これは私がオブジェクトを渡す方法です:
Dim oData As Data
oData = Await FileHelper.DeserializeXml()
Me.Frame.Navigate(GetType(ItemsListView),oData)
私のItemsListView
ページでは、オブジェクトを にバインドして、次のDataContext
ようにデータを表示できるようにします。
Protected Overrides Sub LoadState(navigationParameter As Object, pageState As Dictionary(Of String, Object))
Dim oData As Data = navigationParameter
pageTitle.DataContext = oData.Field
Me.DefaultViewModel("Items") = oData.ListRoot
End Sub
次に、アイテムをクリックしたオブジェクトを渡し、そのデータを次のページにバインドする別のページもあります。これがそのコードです。
Private Sub ItemView_ItemClick(sender As Object, e As ItemClickEventArgs) Handles itemGridView.ItemClick
If e.ClickedItem IsNot Nothing Then
Me.Frame.Navigate(GetType(RecordAddEditView), e.ClickedItem)
End If
End Sub
ページは他にもありますが、アプリが何をしているかを把握するにはこれで十分だと思います。すべてのオブジェクトを次のページに渡し、それらのページのデータを変更した後、Data
すべてのページのすべてのデータをシリアル化できるように、オブジェクトをシリアル化するにはどうすればよいでしょうか? たとえば、LoginPage で oData オブジェクトを呼び出すなど、GetDataForSerialization() メソッドでそれを行う必要がありますか? それはおそらく非常に単純なもので、数日後には理解できないようです. コードの提案は大歓迎です。
シリアライゼーションの方法は次のとおりです。
Public Shared Async Function SerializeXml() As Task
Dim serializer As New XmlSerializer(GetType(Data))
Dim nameSpaces As XmlSerializerNamespaces = New XmlSerializerNamespaces()
Dim mStream As New MemoryStream()
Dim result As Byte()
Dim dataToSerialize As Data = GetDataForSerialization()
' Creates empty namespaces
nameSpaces.Add(String.Empty, String.Empty)
' Serializes the objects
serializer.Serialize(mStream, dataToSerialize, nameSpaces)
' Writes bytes to stream
result = mStream.ToArray()
End Function
Private Shared Function GetDataForSerialization() As Data
' What to do here to get all the data from my Data class so that I can serialize it
End Function