目前我正在使用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中的设置
答案 0 :(得分:8)
如果您想根据ViewModel
的属性更改设置,您的方法可行。唯一的问题是您的ViewModel
与System.Configuration.ApplicationSettingsBase
类紧密结合。
我会创建一个Wrapper类来实现一个接口(例如 IConfigProvider ),它将所有设置公开为Properties和Save方法,并将其注入ViewModel
。这样,您可以在对ViewModel
进行单元测试时传递mock \ stub。
另一个好处是,如果您决定更改存储配置值的方式(假设您要在数据库中存储某些设置),则无需触摸ViewModels
作为所有工作已在您的ConfigProvider
课程中完成。
答案 1 :(得分:2)
有一种更简单的方法......“方式”是相同的,但不是为每个属性添加设置,只需使用所有创建一个Settings
类...中的属性将它们声明为普通属性并实现通常的INotifyPropertyChanged
接口。 然后,这就是区别,只为这个类创建一个设置。这样,维护起来就容易得多。