使用MVVM处理用户设置

时间:2014-01-22 16:33:19

标签: c# wpf mvvm mvvm-light

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

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

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中的设置

2 个答案:

答案 0 :(得分:8)

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

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

另一个好处是,如果您决定更改存储配置值的方式(假设您要在数据库中存储某些设置),则无需触摸ViewModels作为所有工作已在您的ConfigProvider课程中完成。

答案 1 :(得分:2)

有一种更简单的方法......“方式”是相同的,但不是为每个属性添加设置,只需使用所有创建一个Settings类...中的属性将它们声明为普通属性并实现通常的INotifyPropertyChanged接口。 然后,这就是区别,只为这个类创建一个设置。这样,维护起来就容易得多。