如何在MVVM中实现appSettings

2024-05-09

我正在尝试摆脱我使用的警告appSettings在 WPF 项目中。

应用程序配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  ...

  <appSettings>
    <add key="Language" value="English" />
    <add key="Department" value="Production" />
  </appSettings>
</configuration>

Model

open System.Configuration

type UserSettings = {
    Language    : string
    Department  : string
} with 
    static member Null =
        {
        Language    = "English"
        Department  = "Production"
        }
    static member Load() =
        let config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
        {
        Language    = config.AppSettings.Settings.["Language"].Value
        Department  = config.AppSettings.Settings.["Department"].Value
        }
    member this.Save() =
        let config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
        config.AppSettings.Settings.["Language"].Value   <- this.Language
        config.AppSettings.Settings.["Department"].Value <- this.Department
        config.Save() 

视图模型

open FSharp.ViewModule

type SettingsViewModel() as self = 
    inherit ViewModelBase()    

    let settings    = UserSettings.Load()

    let department  = self.Factory.Backing(<@ self.Department @>, settings.Department)

    ...

View

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ViewModels;assembly=mySolution"
    xmlns:fsxaml="http://github.com/fsprojects/FsXaml"
    Title="{Binding Department}" Height="300" Width="400">
    <Window.DataContext>
        <local:SettingsViewModel/>
    </Window.DataContext>

    ...

</Window>

视觉设计师划定界限<local:SettingsViewModel/>并给出警告:

未将对象引用设置为引用的实例。

这似乎是由各个层 (MVVM) 的启动顺序引起的。

Changing

let settings    = UserSettings.Load()

to

let settings    = UserSettings.Null

解决警告。

第二种方法

open FSharp.Configuration
type configSettings = AppSettings<"app.config">

这次的线路<local:SettingsViewModel/>给出错误(仍然构建):

错误 1 ​​在配置的“appSettings”部分找不到名称语言 文件。 (C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\XDesProc.exe.Config)

有没有办法实现appSettings这不会导致警告/错误?

EDIT

第二种方法使用的层:

Model

open FSharp.Configuration
type UserSettings = AppSettings<"app.config">

视图模型

open FSharp.ViewModule

type SettingsViewModel() as self = 
    inherit ViewModelBase()    

    let department  = self.Factory.Backing(<@ self.Department @>, UserSettings.Department)

    ...

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在MVVM中实现appSettings 的相关文章

随机推荐

  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • WordPress 按标题获取帖子,例如

    我正在尝试为 WordPress 创建一个小型搜索功能 AJAX 调用应该获取标题类似的所有帖子 quote 是否有可能在内部实现这种情况get posts 功能 别误会我的意思 阿贾克斯工作正常 我的functions php 中有aja
  • 如何使用谷歌应用程序脚本开发渐进式网络应用程序

    我使用 google app 脚本开发了一些应用程序 并将它们部署为 Web 应用程序 它们都工作正常 然后我决定将它们转换为 PWA 原因是让它们可以安装在智能手机用户的主屏幕上 能够使用推送通知 缓存等 简而言之 PWA 提供的所有优势
  • Automapper Nuget 包失败

    我尝试安装http automapper org http automapper org 但这导致了错误 Install Package AutoMapper already has a dependency defined for Mic
  • 如何在 Mac 上使用 homebrew 安装 apache-spark 2.3.3

    brew install apache spark只安装最新版本的 Spark 2 4 和 brew search apache spark没有给出任何其他选项 有没有办法用自制程序安装旧版本的 Spark Type brew tap ed
  • 如何在 Groovy 中的 JSON Converter 方法中保留字母大小写?

    我正在尝试将 groovy 对象解析为 JSON 属性名称不遵循正确的驼峰式大小写形式 class Client String Name Date Birthdate 当我使用这个时 Client client new Client Nam
  • 当 $.each 和 array.splice(i) 放在一起时,JQuery 处理数组超出索引错误

    最近我在互联网上搜索一些可以处理废弃的 ajax xhr 调用的代码 这就是我发现的 https stackoverflow com a 8841412 395910 xhrPool ajaxSetup beforeSend functio
  • 厚壁二维迷宫中的碰撞检测

    我必须使用 Windows Forms 为学校制作一个游戏 我的游戏包括用户必须穿过迷宫 我试图阻止我的用户使用碰撞检测直接穿过墙壁 但由于用于表示墙壁的矩形形状不同而陷入困境 这是游戏的图像 https i stack imgur com
  • CSS 停止表格行内的分页符

    我试图避免在可能超过一页的 HTML 表的行内出现分页符 我正在使用 Internet Explorer 打印预览以及 BCL EasyPDFSDK 转换为 PDF 来测试这一点 我将以下 CSS 样式以各种组合应用到 td 元素 但对于每
  • Apache Atlas:从 Java 客户端连接时出现 Http 503 服务不可用错误

    我正在从我的 MacOS 运行 atlas docker 映像 管理仪表板工作正常 我可以从仪表板创建 管理实体 但是 当我尝试运行 Atlas 源代码提供的示例 Java 应用程序时 我收到 Http 503 Service Unavai
  • 无法打开本地终端

    我尝试在 Android Studio 中初始化我的终端 但它给了我错误 它说 无法打开本地终端 java io IOException 无法创建 PTY 我的电脑运行的是 Windows 10 如何解决这个问题 当您从 Github 存储
  • Eclipse(STS)+ Maven

    我基本上有两个问题 有没有办法从 Eclipse 调用 Maven 控制台 我可以在哪里写eclipse eclipse 并开始构建 eclipse 项目 哪里有STS http www springsource com products
  • 使用 jquery 自动完成和工具提示[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 How to display the autocomplete and tooltip like th
  • Android Material主题alpha颜色问题

    我已经创建了一个构建版本为 5 0 的应用程序 我在下面编写了主题
  • ruby中如何获取屏幕分辨率

    如何在ruby脚本中获取屏幕分辨率 高度 宽度 在 Linux 上 x y xrandr scan current d x d flatten 在 Windows 上 使用WIN32OLE等 http www ruby forum com
  • Meteor - 使用 Meteor.wrapAsync() 包装 NPM

    我正在尝试使用 Meteor wrapAsync 包装超级代理 NPM 一切正常 直到下面代码的最后一行 这导致我的流星应用程序崩溃 var superagent Meteor npmRequire superagent Example o
  • 禁用 Azure 应用服务上的某些 W3C 日志记录字段

    在 Azure 应用服务中记录 Web 服务器日志时 默认情况下会记录每个字段 并且似乎没有任何方法可以禁用特定字段 有没有解决的办法 或者我错过了什么 只要 applicationhost config 中的 IIS 支持 您就可以使用X
  • Android 中的 XmlPullParser 陷入困境

    经过多个小时的搜索和调试后 我仍然停留在同一个地方 并且 Eclipse 没有帮助我 我试图解析这个 RSS 提要 http fr espnf1 com rss motorsport story feeds 0 xml type 2 这很简
  • 通过 cmake 链接 libc++ 时 libc++abi 的链接问题

    我正在尝试构建一个简单的 hello world C 使用 LLVM Clang 3 7 0 的程序 根据工具链的源代码构建libc 使用命令行 clang std c 14 stdlib libc fno exceptions hello
  • 如何在MVVM中实现appSettings

    我正在尝试摆脱我使用的警告appSettings在 WPF 项目中 应用程序配置