0

在学习了 Visual C# 的手册之后,我开始为 Windows 8 编写一个简单的应用程序。我正在使用Visual Studio 2013 Express.NET Framework 4.5.1。在我到目前为止编写的代码中,在页面的代码隐藏中,我创建了一个人员列表:

private Dictionary<string, People> listPeople = new Dictionary<string, People>();

在此之后,我希望这个列表能够填充ComboBox另一个页面的控件。我认为的解决方案是将Dictionary<string, People>变量保存在漫游中,然后在需要的地方使用它。这样,即使应用程序终止,也可以解决维护保存的人员列表的问题。

我能怎么做?

4

2 回答 2

0

压倒性的建议是将您的设置序列化为字符串,然后将值设置为Values(或将值单独保存在复杂类型中)。

但是,我认为这真的忽略了 Values 是一系列键值对的事实......如果您想支持复杂类型,我认为在漫游文件夹中创建自己的文件是一个更好的主意。我编写了一个小的帮助类来通过 JSON 序列化来完成此任务:

public class ApplicationStorageHelper
{
    private static readonly JsonSerializer jsonSerializer = JsonSerializer.Create();

    public static async Task<bool> SaveData<T>(T data)
    {
        var file =
            await ApplicationData.Current.RoamingFolder.CreateFileAsync("settings.dat", CreationCollisionOption.ReplaceExisting);
        using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            using (var outputStream = stream.GetOutputStreamAt(0))
            {
                using (var writer = new StreamWriter(outputStream.AsStreamForWrite()))
                {
                    var jsonWriter = new JsonTextWriter(writer);
                    jsonSerializer.Serialize(jsonWriter, data);
                    return true;
                }
            }
        }
    }

    public static async Task<T> LoadData<T>()
    {
        try
        {

            var file =
                await ApplicationData.Current.RoamingFolder.GetFileAsync("settings.dat");
            using (var inputStream = await file.OpenSequentialReadAsync())
            {
                using (var reader = new StreamReader(inputStream.AsStreamForRead()))
                {
                    var jsonReader = new JsonTextReader(reader);
                    return jsonSerializer.Deserialize<T>(jsonReader);
                }
            }
        }
        catch (FileNotFoundException)
        {
            return default(T);
        }
    }
}

您必须从 Nuget 或其他方式引用 JSON.Net。

于 2013-11-29T17:35:29.043 回答
0

你已经这样尝试了吗?

var applicationData = Windows.Storage.ApplicationData.Current;
applicationData.RoamingSettings.Values["PeopleList"] = listPeople;

var applicationData = Windows.Storage.ApplicationData.Current;
var listPeople = (Dictionary<string, People>)applicationData.RoamingSettings.Values["PeopleList"];
于 2013-11-29T16:52:12.360 回答