옵션 대화 상자에서 편집중인 일부 속성을 캡슐화하는 ViewModel이 있습니다. Ok 버튼을 누를 때까지 실제로 설정에 저장할 수 없기 때문에이 특정 ViewModel에서 Commit을 호출하게됩니다.유지 보수 가능한 커밋 메소드 작성하기
내 뷰 모델에서 하나의 속성은 다음과 같습니다
public bool SomeProperty
{
get
{
return m_SomeProperty;
}
set
{
if (m_SomeProperty != value)
{
m_SomeProperty = value;
NotifyPropertyChanged("SomeProperty");
}
}
}
private bool m_SomeProperty = Properties.Settings.Default.SomeProperty;
그래서 커밋에 대한 일반적인 구현은 할 것 :
public void Commit()
{
Properties.Settings.Default.SomeProperty = m_SomeProperty;
// Add other properties here...
}
이 그렇게 나쁘지는 않지만 이유 나는 이것이 새로운 속성을 추가하면 두 곳에서 코드를 추가해야한다는 것을 싫어한다. 나는 가능한 한 피하려고 노력한다.
처음에는 OnCommit라는 개인 이벤트를 선언하고 Commit 메서드가 해당 이벤트를 발생시키고 각 속성에 대한 코드가 있어야 이벤트에 대한 이벤트 처리기를 추가하고 설정에 대한 쓰기 작업을 수행 할 수 있다고 생각했지만 어쨌든 생성자에서 이벤트 처리기를 추가하지 않고이를 수행하는 방법을 알지 못한다면 상황을 해결하지 못합니다.
아이디어가 있으십니까? 누구든지 내가하려는 일을하는 우아한 방법이 있니?
수정 : 대답은 6 개 변수가 있습니다. 나는 그 아이디어를 가지고 SoapBox Core에 통합 시켰고 그 결과를 공개했다. 옵션 대화 상자가 어떻게 작동하는지 확인하십시오.
+1 이것은 나에게 가장 좋은 방법 같아 보입니다. –
이것은 매우 멋진 아이디어입니다. 취소 된 작업에 대해서도 (저장된 값으로 다시 설정하기 위해) 취소 작업이 필요하다는 것을 알게되었습니다. 그래도 GUI에서 액세스하는 경우 자물쇠가 필요합니까? –
정말로 'commitActions'에 액세스하는 스레드가 하나 뿐인 경우에는 잠금이 필요하지 않습니다. 코드가 더 복잡해지면 잠금 장치가 제안되었습니다. 또한, 실행 취소 및 재실행을위한'Action'을 포함하는 자신만의 Undo/Redo 클래스를 만들 수 있습니다. – user7116