XAML 在本地文件夹中存储收藏的最佳方式是什么?[已关闭]

am46iovg  于 2023-01-03  发布在  其他
关注(0)|答案(3)|浏览(122)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

5年前关闭。
Improve this question
我有一个简单的应用程序与一个简单的可观察的集合。用户可以手动添加到列表中的项目单击添加按钮,可以给予它一个名称和其他一些相关的属性。
我正在尝试存储这些属性,例如,假设用户添加一个新的项目与名称“样本”现在当应用程序终止或用户导航到另一个页面。集合重置为没有项目。那么什么是最好的方式来存储每个项目的值,然后恢复它当应用程序加载或导航到该页面。
注:用户有权添加任意数量的项目,每个项目总共有八个(可以变化)不同的属性。

sshcrbum

sshcrbum1#

你有两个问题。

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

要处理这个问题,可以全局初始化ObservableCollection一次,而不是在使用它的页面中初始化。
因此,如果您使用ObservableCollection<string>,请将此初始化添加到App.xaml.cs中,作为

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

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

在用户关闭应用程序时维护ObservableCollection

我强烈推荐Newtonsoft.Json .简单、容易、快速和轻量级的Json解析器来将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");

祝你好运。

slsn1g29

slsn1g292#

存储你的数据在一个数据库或本地文件(xml - json..或甚至txt文件).然后加载和更新数据作为你想要的.

建议

使用sql server数据库来存储你的数据

sqougxex

sqougxex3#

使用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);
}

相关问题