如何在 运行 时间创建不同的设置集?
How do I create different sets of settings at run time?
我的 WPF 应用程序有一堆用户可以调整的设置,我正在使用内置的应用程序设置(Properties.Settings...和一个 .settings 文件)来执行此操作并且一切正常.现在,该应用程序应该允许用户为不同的目的定义不同的设置预设(准确地说是不同的样本,它是一个测量系统软件),这样他们在切换时就不需要再次检查每个设置。
因此,我需要能够在运行时创建应用程序设置的副本并将它们全部单独保存在自己的文件中,然后在应用程序启动时恢复它们。我可以在设计时创建新的设置文件,但这不在用户的控制范围内,也不是我想要的。我也可以在代码中创建新的 Settings 实例,但是当我保存它们时,它只是覆盖相同的 user.config 文件,使用默认实例并且 Save() 方法不带参数将其保存在其他地方。
有什么想法吗?
您必须为预设设置创建一个单独的 class。然后您可以在设置中将其保存为列表。
假设您有一个预设 class 来保存您的设置值:
public class Preset
{
public int MaxPower { get; set; }
public int AllowedRotations { get; set; }
}
您可以像这样在一个地方获得所有这些设置:
var presets = JsonConvert.DeserializeObject<List<Preset>>(Properties.Settings.Default.Presets);
你会像这样保存设置:
List<Preset> presets = null;
if (Properties.Settings.Default.Presets == null)
presets = new List<Preset>();
else
presets = JsonConvert.DeserializeObject<List<Preset>>(Properties.Settings.Default.Presets);
presets.Add(new Preset() { AllowedRotations = 1000, MaxPower = 200});
Properties.Settings.Default["Presets"] = JsonConvert.SerializeObject(presets);
Properties.Settings.Default.Save();
我想您也可以为这些对象设置某种唯一 ID,这样您就可以将一个预设与另一个区别开来。
注意:我在这里使用 Json 转换器并将对象列表保存为 JSON。
我的 WPF 应用程序有一堆用户可以调整的设置,我正在使用内置的应用程序设置(Properties.Settings...和一个 .settings 文件)来执行此操作并且一切正常.现在,该应用程序应该允许用户为不同的目的定义不同的设置预设(准确地说是不同的样本,它是一个测量系统软件),这样他们在切换时就不需要再次检查每个设置。
因此,我需要能够在运行时创建应用程序设置的副本并将它们全部单独保存在自己的文件中,然后在应用程序启动时恢复它们。我可以在设计时创建新的设置文件,但这不在用户的控制范围内,也不是我想要的。我也可以在代码中创建新的 Settings 实例,但是当我保存它们时,它只是覆盖相同的 user.config 文件,使用默认实例并且 Save() 方法不带参数将其保存在其他地方。
有什么想法吗?
您必须为预设设置创建一个单独的 class。然后您可以在设置中将其保存为列表。
假设您有一个预设 class 来保存您的设置值:
public class Preset
{
public int MaxPower { get; set; }
public int AllowedRotations { get; set; }
}
您可以像这样在一个地方获得所有这些设置:
var presets = JsonConvert.DeserializeObject<List<Preset>>(Properties.Settings.Default.Presets);
你会像这样保存设置:
List<Preset> presets = null;
if (Properties.Settings.Default.Presets == null)
presets = new List<Preset>();
else
presets = JsonConvert.DeserializeObject<List<Preset>>(Properties.Settings.Default.Presets);
presets.Add(new Preset() { AllowedRotations = 1000, MaxPower = 200});
Properties.Settings.Default["Presets"] = JsonConvert.SerializeObject(presets);
Properties.Settings.Default.Save();
我想您也可以为这些对象设置某种唯一 ID,这样您就可以将一个预设与另一个区别开来。
注意:我在这里使用 Json 转换器并将对象列表保存为 JSON。