我在玩MVVM,瞭解模式中涉及的東西。我正在編寫的第一個應用程序是一個非常小的應用程序,它基本顯示App.Config中的兩個設置。使用ICommand將設置保存到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();
}
}
因此,該模型是負責實際的數據訪問,這是我們想要的,對?
此外我有一個視圖模型(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用戶控件,實例化是這樣的:
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,這是在這一點上基本上是空的。我已將該命令連接到視圖中的按鈕。
但基本上,現在是什麼?處理值保存的最佳方法是什麼? 我工作的例子太過於人爲了嗎?
是的,因爲保存行爲,我想知道在這種情況下,命令是否是不必要的,我的例子太過於人爲設計了。 設置是這樣完成的,因爲似乎沒有編輯方法。 – fuaaark 2012-03-21 10:01:14
@fuaaark嗯,這取決於你選擇你真正想要的東西。如果你的目標是「當按鈕被點擊時能夠寫入這個app.config」,那麼你需要一個按鈕和一個'ICommand'。如果你不需要一個按鈕,那麼只需保存到屬性設置器中的app.config文件,你就不需要'ICommand'。 – ken2k 2012-03-21 10:10:19
我要使用該命令來實現它,以學習東西:)但是我可能會考慮一些SaveSettings()方法並從命令中調用該方法,以免用數據訪問邏輯來監視該命令。是對的嗎? – fuaaark 2012-03-21 10:14:21