将集合存储在本地文件夹中的最佳方法是什么?

时间:2017-07-14 14:17:06

标签: c# xaml uwp

我有一个简单的应用程序,带有一个简单的可观察集合。用户可以通过单击“添加”按钮手动将项目添加到列表中,并为其指定名称和其他一些相关属性。

我正在尝试存储这些属性,例如,当应用程序终止或用户导航到另一个页面时,假设用户现在添加名为“Sample”的新项目。重置集合时没有任何项目。那么,当应用加载或导航到该页面时,存储每个项目的价值然后将其恢复的最佳方法是什么。

注意:用户有权根据需要添加任意数量的项目,每个项目总共有8个(可能会有所不同)不同的属性。

3 个答案:

答案 0 :(得分:0)

将您的数据存储在数据库中 或本地文件(xml - json ..甚至txt文件)。 然后根据需要加载和更新数据。

推荐

使用sql server数据库存储数据

答案 1 :(得分:0)

使用Object Storage Helper

存储ObservableCollection

以下是示例代码

var helper = new LocalObjectStorageHelper();

// Save objects 
var o = new MyLargeObject
{
    ...
};
await helper.SaveFileAsync(keySimpleObject, o);

// Read objects 
string keyLargeObject = "large";
if (await helper.FileExistsAsync(keyLargeObject))
{
    var result = await helper.ReadFileAsync<MyLargeObject>(keyLargeObject);
}

答案 2 :(得分:0)

这里有2个问题。

当用户从当前视图导航到不同视图时,

维护ObservableCollection

要处理此问题,您可以全局初始化ObservableCollection一次,而不是在您使用它的页面中。可能在App.xaml.cs

因此,如果您使用的是ObservableCollection<string>,请在App.xaml.cs中将此初始化添加为

public ObservableCollection<string> GlobalList {get; set;} = new ObservableCollectin<string>;

现在,在任何视图中,您都可以像App一样使用App.GlobalList引用来执行添加,删除以及您要使用的其他功能。

在用户关闭应用时维护ObservableCollection

我强烈推荐Newtonsoft.Json。简单,简单,快速和轻量级的Json Parser将您的ObservableCollection转换为Json并返回。

您可以将ObservableCollection转换为json字符串,如下所示。

string jsonData = JsonConvert.SerializeObject(App.GlobalList);

您可以将json转换为ObservableCollection,如下所示。

App.GlobalList = JsonConvert.DeserializeObject<ObservableCollection<string>>(jsonData);

您可以使用以下方法保存和检索数据。 (GIST

public async void SaveList(string FileName, string StringValue)
{
    StorageFolder storageFolder = ApplicationData.Current.LocalFolder;

    StorageFile sampleFile = (File.Exists(Path.Combine(storageFolder.Path,FileName))) ?
        await storageFolder.GetFileAsync(FileName)
       :await storageFolder.CreateFileAsync(FileName, CreationCollisionOption.ReplaceExisting);

    await FileIO.WriteTextAsync(sampleFile, StringValue);
}

public async Task<string> RetrieveList(string FileName)
{
    StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
    StorageFile sampleFile = (File.Exists(Path.Combine(storageFolder.Path,FileName))) ?
            await storageFolder.GetFileAsync(FileName)
           : await storageFolder.CreateFileAsync(FileName, CreationCollisionOption.ReplaceExisting);
    return await FileIO.ReadTextAsync(sampleFile);
}

所以要保存你的json,你需要调用

SaveList("GlobalList.txt", jsonData);

并检索您需要致电

string jsonData = await RetrieveList("GlobalList.txt");

此项目的完整回购可用Here

祝你好运。