【问题标题】:Handling user settings with MVVM使用 MVVM 处理用户设置
【发布时间】:2014-02-12 20:18:08
【问题描述】:

目前我正在使用MVVM-light 框架开发一个WPF 应用程序。

此时我正在设置我的设置,如我的视图模型中的下一个示例代码所示:

private string _property

public string Property
{
    get { return _property; }
    set
    {
        if (_property != value)
        {
            _property = value;
            Settings.Default.Property = value;
            RaisePropertyChanged("Property");
        }
    }
}

我在应用程序退出时保存我的设置:

protected override void OnExit(ExitEventArgs e)
{
    Settings.Default.Save();
}

一切都按预期进行,但是...

问题:这是正确的方法还是有更好的方法来处理 MVVM 中的设置

【问题讨论】:

  • 您可以直接绑定到设置{x:Static Settings.Default.Whatevs},然后在您的窗口中监视关闭事件,然后您可以保存设置。 UI 设置是 View 的关注点。

标签: c# wpf mvvm mvvm-light


【解决方案1】:

如果您想根据ViewModel 的属性更改您的设置,您的方法会奏效。唯一的问题是您的 ViewModelSystem.Configuration.ApplicationSettingsBase 类紧密耦合。

我将创建一个 Wrapper 类,该类实现一个接口(例如 IConfigProvider),该接口将您的所有设置公开为 Properties 和 Save 方法,并将其注入您的 ViewModel。这样,当您对ViewModel 进行单元测试时,您可以传递一个模拟\存根。

另一个好处是,如果您决定更改存储配置值的方式(例如,您想在数据库中存储一些设置),则无需触摸您的 ViewModels,因为所有工作都已完成在你的ConfigProvider 班级中。

【讨论】:

    【解决方案2】:

    有一个更简单的方法......“方法”是相同的,但不是为每个属性添加设置,只需创建一个 Settings 类,其中包含您的 所有 属性...将它们声明为普通属性并实现通常的INotifyPropertyChanged 接口。 然后,不同之处在于,只为这个类创建一个设置。这样,维护起来就容易多了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 2018-08-26
      • 2020-04-24
      • 1970-01-01
      相关资源
      最近更新 更多