我正在填充自定义类类型的ObservableCollection。我需要在应用程序关闭时保存此集合,并在导航到主应用程序页面时重新加载它。我不确定最好的过程。
MainPage.xaml.cs中
public ObservableCollection<History> Items { get; set; }
public MainPage()
{
InitializeComponent();
Items = new ObservableCollection<History>();
HistoryListBox.ItemsSource = Items; //HistoryListBox displays the Items
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
... populate HistoryListBox from Saved data? ....
}
private async void RunPerformanceTestButton_Click(object sender, RoutedEventArgs e)
{
... run some processes ...
PopulateHistoryListBox();
}
private void PopulateHistoryListBox()
{
Items.Add(new History { ConnectionType = ConnectionTypeResultTextBlock.Text, DateTime = DateTime.Now, ConnectionLatency = NetworkLatencyResultTextBlock.Text, ConnectionSpeed = NetworkSpeedResultTextBlock.Text });
}
History.cs
public string ConnectionType
{
get;
set;
}
public DateTime DateTime
{
get;
set;
}
public string ConnectionSpeed
{
get;
set;
}
public string ConnectionLatency
{
get;
set;
}
那么将ObservableCollection保存到IsolatedStorage然后检索它的最佳方法是什么?
答案 0 :(得分:0)
我建议接受MVVM。创建一个View Model类并将Items
移到那里。然后将Items
属性绑定到XAML中的ListBox
。
通常状态会加载到Page
的{{1}}事件句柄中并保存在Loaded
事件中。但是,根据应用在页面之间导航的方式,您可能希望在Unloaded
中加载状态并在OnNavigatedTo
中保存状态。加载通常会创建视图模型并从隔离存储加载它,并且保存会将其状态保存到独立存储。例如:
OnNavigatedFrom
当然,这假设您已将Json.NET包添加到项目中。
为了帮助设计,您可以在XAML中创建视图模型(因此您可以在设计中绑定某些内容)。例如:
private MainViewModel MainViewModel;
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
MainViewModel = new MainViewModel();
using (var iso = IsolatedStorageFile.GetUserStoreForApplication())
{
try
{
if (iso.FileExists("AppState.date"))
{
using (var stream = iso.OpenFile("AppState.dat", FileMode.Append, FileAccess.Write))
{
string text;
using (var reader = new StreamReader(stream))
{
text = await reader.ReadToEndAsync();
}
var history = JsonConvert.DeserializeObject<List<History>>(text);
MainViewModel.Items = history;
}
}
}
catch (IOException)
{
// TODO: log
}
}
}
protected override async void OnNavigatedFrom(NavigationEventArgs e)
{
using (var iso = IsolatedStorageFile.GetUserStoreForApplication())
{
try
{
using (var stream = iso.OpenFile("AppState.dat", FileMode.Create, FileAccess.Write))
{
Debug.WriteLine(stream.Length);
using (var writer = new StreamWriter(stream))
{
await writer.WriteLineAsync(JsonConvert.SerializeObject(MainViewModel.Items));
}
}
}
catch (IOException)
{
// TODO: log
}
}
}
在MainViewModel的构造函数中,如有必要,构造调试状态。
然后,您可以将视图模型初始化为&#34; debug&#34;以外的其他内容。 <phone:PhoneApplicationPage.DataContext>
<viewModels:MainViewModel/>
</phone:PhoneApplicationPage.DataContext>
事件处理程序或Loaded
中的状态,例如:
OnNavigatedTo