2012-08-03 3 views
1

WPF 대화 상자 (Window의 상속자)가 있습니다. 대화 상자에는 ViewModel의 "process"명령에 바인딩 된 "OK"버튼이 있습니다. "process"명령은 Josh Smith RelayCommand입니다. "확인"버튼의 CommandParameter는 대화 상자 창 자체로 설정됩니다. 처리가 성공하면 (자), ViewModel의 커멘드 핸들러 내로부터 다이얼로그 윈도우가 닫혀집니다. 그것은 저에게 단 하나 책임 원리의 위반 같이 보인다. 호출자 창을 닫을 수도 있고 닫지 않을 수도있는 명령에 맞는 패턴은 무엇입니까?발신자 창을 닫는 명령의 올바른 디자인은 무엇입니까?

답변

1

일부 디자인 패턴이 깨진 것처럼 보이지만, ViewModel은 대화 상자를 닫거나 특정 상태를 설정하는 것과 같은 특정 작업을 수행하기 위해 View를 인식 할 수 있습니다.

View-ViewModel 바인딩 중에 ViewModel을보기로 참조하여 초기화 할 수 있습니다. 나중에 Command를 실행하여 ViewModel은 공통 인터페이스를 사용하여 뷰에서 제공하는 기능을 사용할 수 있습니다.

귀하의 경우에는 으로 창을 전달하는 대신 (Caliburn Micro처럼) 이렇게하는 것이 좋습니다.

+0

그래서 Caliburn.Micro는 클래스 이름 지정 규칙을 사용하여보기를 찾습니다. 나도 그걸 좋아하지 않아. 나는 건설 시간에 지나가는 것에 대한 당신의 생각을 좋아하지만 그것은 후속 질문을 제기한다. 일반적으로보기의 리소스 섹션에 ViewModel 클래스를 생성하고 싶습니다. XAML의 ViewModel 속성에 대해 Intellisense를 얻었 기 때문에 마음에 들었습니다. ViewModel 초기화의 IoC 유형을 계속 지원하면서 XAML에서 이러한 것들을 구성하는 좋은 방법이 있습니까? – Brannon

관련 문제