【问题标题】:WPF: How to save only one Settings variable?WPF:如何只保存一个设置变量?
【发布时间】:2015-03-21 00:24:24
【问题描述】:

有没有办法在我的设置中只保存一个变量作为默认值?我知道有一个命令Properties.Settings.Default.Save();,但我只想保存我的一个设置变量的更改,而不是全部。

【问题讨论】:

  • 在调用 Properties.Settings.Default.Save() 之前只更新一个设置令牌。
  • 好的,但是当我更改多个设置变量并且我只想保存其中一个时,有没有办法解决这个问题?我也许可以将此变量的值存储到临时变量中,而不是重新加载设置,而不是只保存对这个变量的更改...
  • 好吧,既然不想保存,为什么还要更改设置值呢?
  • 我可能使用了错误的设置方式,但我有 bool 女巫指示,菜单之一是否应该可见。我想让用户选择是否要存储此设置。但是我还有一些其他设置,每次更改时我都想保存它们...
  • 使用辅助变量保存最终设置不是更好吗?您可以将菜单可见性数据存储在其他变量或类中,并在每次更改时继续保存您的其他设置,最后保存菜单可见性设置。

标签: c# wpf settings


【解决方案1】:

您的问题暗示了一个设计问题:

用户期望对设置进行清晰的抽象:

  • 在程序启动时加载所有设置
  • 可能在程序执行期间修改设置
  • 在程序退出前保存所有设置

如果您需要“编辑一些值但不保存为设置”之类的内容,那么您应该引入一个额外的层来实现这一点:允许在不修改设置的情况下更改一些值。

【讨论】:

    【解决方案2】:

    不,无法在 Designer 生成的 Settings 对象中保存单个属性值。您可以只保存整个对象或根本不保存。

    请注意,设置保存在一个 XML 文件中,这使得只写出单个值无论如何都不切实际。另请注意,编写此 XML 文件相对便宜;它通常是一个小文件(除非您在 Settings 对象中序列化一些巨大的数据),并且可以一遍又一遍地写入对您的程序的性能影响很小(特别是如果您只是为了响应用户操作……与计算机相比,用户的速度非常慢)。

    通常,您应该推迟编写Settings 对象,直到程序退出。在任何设置(或一组设置)被修改时调用Settings.Default.Save() 是非常合适的,以确保无论程序稍后发生什么(例如它崩溃),这些设置实际上都保存在磁盘上。


    最后请注意,就您的具体情况而言——一个指示是否显示菜单的标志,以及另一个指示是否保留此值的标志——您不一定需要在其他地方添加另一个标志并有条件地保存基于第一个标志。

    相反,只需将两个标志保留在您的 Settings 对象中,例如Settings.Default.RememberMenuVisibleSettingsSettings.Default.MenuVisible。然后作为程序启动的第一件事,您可以检查RememberMenuVisibleSettings,如果它设置为false,只需将MenuVisible 初始化为其默认设置,覆盖保存到设置文件中的任何内容。然后你的程序的其余部分不需要担心它;在此之后不需要对任一标志进行特殊处理。您可以正常保存两者,确信当程序再次启动时它会做正确的事情。

    【讨论】:

      猜你喜欢
      • 2013-07-01
      • 2015-06-04
      • 2018-01-04
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多