我的WPF应用程序具有许多用户可以调整的设置,我正在使用内置的应用程序设置(Properties.Settings ...和.settings文件)来执行此操作,并且一切正常。现在,该应用程序应该允许用户为不同目的定义不同的设置预设(准确地说是不同的样品,这是一种测量系统软件),因此他们在切换时不需要再次遍历所有设置。
因此,我需要能够在运行时创建应用程序设置的副本并将它们分别保存在自己的文件中,然后在应用程序启动时将其还原。我可以在设计时创建新的设置文件,但这不在用户的控制范围之内,而不是我想要的。我也可以在代码中创建新的Settings实例,但是当我保存它们时,它只会覆盖相同的user.config文件,它是所使用的默认实例,并且Save()方法无需任何参数即可将其保存到其他位置。
有什么想法吗?
您必须为您的预设设置创建一个单独的类。然后,您可以在“设置”中将其另存为列表。
所以可以说您有一个保留您的设置值的预设类:
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,以便您可以将一个预设与另一个预设区分开。
NOTE:我在这里使用Json转换器并将对象列表另存为JSON。