MVVM을 가지고 놀고있어 패턴과 관련된 내용을 알게되었습니다. 필자가 작성한 첫 번째 응용 프로그램은 기본적으로 App.Config에서 2 개의 설정을 표시하는 아주 작은 응용 프로그램입니다.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();
}
}
그래서,이 모델이 실제 데이터 액세스에 대한 책임이 우리가 원하는 것입니다, 권리?
public partial class MainWindow : Window
{
public SettingsViewModel SettingsViewModel { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Settings settings = new Settings();
SettingsViewModel = new SettingsViewModel(settings);
}
}
가 마지막으로 ICommand의를 구현하는 SaveCommand을 거기에있다 :
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을이다 :
는 또한 내가 뷰 모델은 (ViewModelBase가에서 INotifyPropertyChanged를 구현)이 이 시점에서 기본적으로 비어 있습니다. 보기의 단추에 명령을 연결했습니다.
하지만 기본적으로 지금은 무엇이 있습니까? 값을 저장하는 가장 좋은 방법은 무엇입니까? 제가 작업 한 예가 너무 고심 했습니까?
그래, 저축 행위 때문에 나는이 명령이 불필요한 명령인지 궁금해했다. 내 예제가 너무 고심했다. 편집 방법이 없기 때문에 설정이 이와 같이 이루어집니다. – fuaaark
@fuaaark 글쎄, 당신이 실제로 원하는 것을 선택하는 것은 당신에게 달려 있습니다. 목표가 "버튼을 클릭 할 때이 app.config에 쓸 수 있도록하려면"버튼과 'ICommand'가 필요합니다. 버튼이 필요 없다면, 단순히 속성 setter의 app.config 파일에 저장하면'ICommand'는 필요 없습니다. – ken2k
나는 그것을 배우기 위해 명령을 사용하여 구현할 것이다. :)하지만 데이터 액세스 로직을 사용하여 명령을 폴링하지 않도록 명령에서 일부 SaveSettings() 메서드를 인수로 호출해야합니다. 그게 맞습니까? – fuaaark