1

2つのObservableColectionを持つViewModelがあり、アプリケーションを閉じるときにViewModelをシリアル化します。

私のコード:

private void Application_Closing(object sender, ClosingEventArgs e)
    {
        using (var store = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (var stream = new IsolatedStorageFileStream("data.txt", FileMode.Create, FileAccess.Write, store))
            {
                var serializer = new XmlSerializer(typeof(AppViewModel.NewsViewModel));
                serializer.Serialize(stream, ViewModel);
            }
        }
    }

AppViewModel.NewsViewModelには

 public ObservableCollection<NewsItemViewModel> EpsItems
            {
                get { return _epsItems; }
            }


            public ObservableCollection<NewsItemViewModel> OthItems
            {
                get { return _othItems; }
            }

そして、満たされたコレクションを作成する方法。

NewsItemViewModel:

public class NewsItemViewModel
        {
            public NewsItemViewModel()
            {
            }

            public int Id { get; set; }
            public DateTime Date { get; set; }
            public string Title { get; set; }
            public string Text { get; set; }
            public string FullText { get; set; }
            public string ImageUrl { get; set; }
            public string NewsUrl { get; set; }
        }

すべて正常に動作しますが、たとえば、各コレクションで6つのレコードを取得し、その後ViewModelをシリアル化する方法がわかりません...これを行うにはどうすればよいですか?たとえば、EpsItemsとOthItemsに20個のエントリが含まれているとします。

前もって感謝します。そして、私の悪い英語でごめんなさい^^

UPD:これは、私が欲しいものを説明する例ですが、方法がわかりません...たとえば、ユーザーがシリアル化されたアプリケーションビューモデルを閉じるときに、EpsItemsの30エントリとOthItemsの25エントリをダウンロードしました。そして、私はそれぞれ30と25のエントリをストレージに保持します。ユーザーのダウンロードよりも少ないエントリをコレクションに保存したい...たとえば、各コレクションの10レコード。質問:この実装を作成するにはどうすればよいですか?実装とコードを手伝ってください...

4

1 に答える 1

2

達成するのは簡単に見えます:

  1. ClearUnnecessaryDataたとえば、クラスでというメソッドを作成ViewModelし、そこでクリーニングを実行します。

  2. シリアル化の前にそのメソッドを呼び出します。

メソッドは次のようになります。

for(int i = MAX_SERIALIZATION_ITEMS; i < EpsItems.Count; )
{
    EpsItems.RemoveAt(MAX_SERIALIZATION_ITEMS);
}

for(int i = MAX_SERIALIZATION_ITEMS; i < OthItems.Count; )
{
    OthItems.RemoveAt(MAX_SERIALIZATION_ITEMS);
}

また、ApplicationClosingイベントハンドラーは次のようになります。

private void Application_Closing(object sender, ClosingEventArgs e)
{
    ViewModel.ClearUnnecessaryData();

    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (var stream = new IsolatedStorageFileStream("data.txt", FileMode.Create, FileAccess.Write, store))
        {
            var serializer = new XmlSerializer(typeof(AppViewModel.NewsViewModel));
            serializer.Serialize(stream, ViewModel);
        }
    }
}
于 2013-03-19T07:52:26.743 に答える