WPF와 MVVM 문제를 배우려고 노력하고 있지만 걸림돌을 겪었습니다. 이 질문은이 질문과 비슷하지만 완전히 같지는 않습니다 (wpf-with-mvvm 처리-대화) ...
MVVM 패턴을 사용하여 작성된 "로그인"양식이 있습니다.
이 양식에는 사용자 이름과 비밀번호를 보유한 ViewModel이 있으며, 이는 일반 데이터 바인딩을 사용하여 XAML의보기에 바인딩됩니다. 또한 일반 데이터 바인딩을 사용하여 폼에있는 "로그인"버튼에 바인딩 된 "로그인"명령이 있습니다.
"로그인"명령이 실행되면 ViewModel에서 기능을 호출하여 로그 오프하는 네트워크를 통해 데이터를 전송합니다.이 기능이 완료되면 2 가지 작업이 있습니다.
로그인이 잘못되었습니다-MessageBox 만 표시하면됩니다.
로그인이 유효합니다. 로그인 양식을 닫고 true로 리턴해야합니다
DialogResult
.
문제는 ViewModel이 실제 뷰에 대해 아무것도 모르므로 뷰를 닫고 특정 DialogResult를 반환하도록 어떻게 말할 수 있습니까? CodeBehind에 일부 코드를 붙일 수 있고 View를 ViewModel에 전달할 수는 있지만 MVVM의 요점을 완전히 물리 칠 것 같습니다 ...
최신 정보
결국 나는 방금 MVVM 패턴의 "순도"를 위반하고 View가 Closed
이벤트를 게시 하고 Close
메소드를 공개하도록했습니다 . 그런 다음 ViewModel은을 호출 view.Close
합니다. 보기는 인터페이스를 통해서만 알려져 있으며 IOC 컨테이너를 통해 연결되므로 테스트 가능성이나 유지 관리 성이 손실되지 않습니다.
허용 된 답변이 -5 표인 것보다는 어리석은 것 같습니다! "순수한"상태에서 문제를 해결함으로써 얻는 좋은 감정을 잘 알고 있지만 확실히 한 줄 방법을 피하기 위해 200 줄의 이벤트, 명령 및 행동을 생각하는 유일한 사람은 아닙니다. "패턴"과 "순도"의 이름은 조금 말도 안됩니다 ...
Close
방법이 여전히 가장 좋은 해결책 이라고 생각합니다 . 다른 더 복잡한 대화 상자의 다른 모든 것은 MVVM과 데이터 바인딩이지만 단순한 방법 대신 여기에 거대한 "솔루션"을 구현하는 것은 어리석은 것처럼 보였습니다 ...