MVVM 패턴이 새로 도입되었습니다.# MVVM 프리젠 테이션 로직
보기에는 로그인 버튼과 진행 막대가 있습니다.
저는 LoginViewModel이라는 뷰 모델을 가지고있어 LoginCommand 명령을 노출하고 LoginPage.xaml 뷰에 연결됩니다.
로그인 명령을 실행하면 로그인 버튼을 사용할 수 없으며 진행률 막대가 표시되어야합니다.
로그인에 실패하면 로그인 버튼이 활성화되고 진행률 표시 줄이 숨겨져 야합니다.
나는이 프리젠 테이션 논리가 어디에서 발생해야하는지 확신 할 수 없다. 보기 모드 또는 페이지의 코드 숨김에서 발생해야합니까?
현재 로그인 프로세스가 시작될 때 true로 설정되고 실패하면 false로 설정되는 LoggingIn이라는 뷰 모델에 부울 속성이 있습니다. 이 부울은 각각 버튼과 진행률 표시 줄의 IsEnabled 및 Visibility 속성에 연결됩니다.
이것은 잘못된 것이므로 OnBeginLogin과 OnEndLogin 두 가지 이벤트를 만들고 컨트롤의 시각적 상태를 제어하는 코드의 코드 뒤에 연결해 보았습니다. 그러나 이전 솔루션보다 훨씬 많은 코드가 필요했습니다.
또한 뷰 모델에서 시각적 상태를 뷰 모델에서 제어 할 수 있도록 컨트롤, LoginButtonEnabled 및 ProgressBarVisible에 특정한 두 가지 속성을 뷰 모델에 표시 할 수 있습니다. 그러나 취소 단추를 추가하면 CancelButtonEnabled라는 다른 속성을 추가해야합니다.
프리젠 테이션 로직을 뷰 모델에서 처리해서는 안되기 때문에 이벤트를 추가하는 것이 가장 좋은 해결책 인 것 같습니다.하지만 가장 좋은 방법이나 표준/일반적인 방법은 궁금합니다.
로그인에 성공한 경우 사용자를 이전 페이지로 되돌리려하거나 다른 페이지를보기 모델이나 페이지의 코드 숨김으로 처리해야합니까? 다시 이것이 뷰 모델에 대한 것이 아니라는 것이 확실합니다.
도움 주셔서 감사합니다.
예, 상태 버튼의 새 속성을 추가하는 것이 좋습니다. 이것이 ViewModel을 호출 한 이유입니다. – Daniil
DataTriggers를 사용하여 xaml에서 프리젠 테이션 로직을 처리해 보셨습니까? 복잡한 프리젠 테이션 로직을 사용하는 경우 valueconverters를 사용하여 로직을 처리하고 DataTrigger가 이해할 수있는 값을 반환 할 수 있습니다. – failedprogramming