Я играю с MVVM, узнавая все, что связано с паттерном.Первое приложение, которое я пишу, - это очень маленькое приложение, которое в основном отображает 2 параметра из App.Config.
Моя цель - иметь возможность писать в этот app.config при нажатии кнопки.
Моя проблема заключается в том, что я не знаю точно, как подключить команду, чтобы делегировать эту работу, или если это даже путь.
Мой App.configочень просто:
<configuration>
<appSettings>
<add key="duration" value="100" />
<add key="operators" value="10" />
</appSettings>
</configuration>
Модель выглядит следующим образом:
get
{
// try to parse the setting from the configuration file
// if it fails return the default setting 0
int durationSetting = 0;
Int32.TryParse(ConfigurationManager.AppSettings["duration"], out durationSetting);
return durationSetting;
}
set
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove("duration");
config.AppSettings.Settings.Add("duration", Convert.ToString(value));
ConfigurationManager.RefreshSection("appSettings");
config.Save();
}
}
Итак, модель отвечает за фактический доступ к данным, это то, что мы хотим, верно?
Кроме того, у меня есть ViewModel (ViewModelBase реализует INotifyPropertyChanged):
public class SettingsViewModel : ViewModelBase
{
private Settings Settings { get; set; }
private SaveCommand saveCommand = new SaveCommand();
public ICommand SaveCommand
{
get
{
return saveCommand;
}
}
public SettingsViewModel(Settings settings)
{
if (settings == null)
throw new ArgumentNullException("Settings", "Settings cannot be null");
Settings = settings;
}
public int Duration
{
get { return Settings.Duration; }
set
{
if (Settings.Duration != value)
{
Settings.Duration = value;
RaisePropertyChanged("Duration");
}
}
}
Представление представляет собой xaml usercontrol, например,
public partial class MainWindow : Window
{
public SettingsViewModel SettingsViewModel { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Settings settings = new Settings();
SettingsViewModel = new SettingsViewModel(settings);
}
}
Наконец, есть SaveCommand, который реализуетICommand, который в основном пустой на данный момент.Я подключил команду к кнопке в представлении.
Но в основном, что теперь?Какой лучший способ справиться с сохранением значений?Является ли пример, над которым я работаю, слишком надуманным?