2011-02-16 4 views
2

복잡한 데이터 개체가 있다고 가정 해보십시오. 객체의 다양한 속성을 편집하기에 충분히 복잡하기 때문에 사용자가 여러 개의 스크린을 갖는 것이 가장 좋습니다. 기본적으로 구성된 항목에 대한 장바구니입니다.WPF - MVVM 화면 관리

그래서 한 화면에서 항목을 추가 할 수 있습니다. 다른 옵션을 사용하면 비용이 연관된 미리 결정된 변경 사항을 해당 항목에 추가 할 수 있습니다. 세 번째 화면에서는 항목의 전체 설정을 구성 할 수 있습니다.

짐작할 수 있겠지만, 각 화면은 똑같은 카트에서 작동하며 내부의 항목의 다른 속성과 관계 만 변경하면됩니다. 그래서

, 우리는 MVVM을 사용하여 응용 프로그램을 작성하려고하는거야, 그리고 (물론 그들 사이의 탐색으로) 다양한 화면을 논의하면서 우리는 다음과 같은 질문에 도착 :

하는 사람들이 일반적으로 관리하려면 어떻게 응용 프로그램 MVVM을 사용할 때 상태? 사용자가 화면을 변경하는 데 사용할 탐색 바는 화면 바깥에 있지만 사용자가 클릭하면 어떤 방법으로 사람들을 숨겨서 다른 사람을 보여 주었습니까?

보다 일반적으로 사람들은 글로벌 애플리케이션 상태를 어떻게 처리합니까? 사용자는 한 번에 하나의 카트에서만 작동 할 수 있으며 한 번에 한 명의 사용자 만 로그인 할 수 있으며 한 번에 한 화면 만 표시 할 수 있습니다. 이러한 중요한 속성을 저장하는 싱글 톤을 만드는 것이 가장 좋을 것이고 ViewModel은 이벤트 콜렉터를 통해 변경 사항을 구독하고 복사본을 유지할 수 있습니까?

내가 알 수 있듯이이 문제로 어디서부터 시작해야할지조차 알지 못하기 때문에 조언이 전혀 환영받지 못하고 알맞다.

답변

3

ViewModels를 사용하여 응용 프로그램 상태를 추적합니다.

하나의 ViewModel은 전체 응용 프로그램을 제어하며 사용자가 현재 어떤 페이지를 처리 ​​하는지를 제어합니다. 응용 프로그램 자체는 기본 ViewModel에 바인딩되며 대부분의 응용 프로그램 화면 공간은 ViewModel.CurrentPage에 바인딩 된 ContentControl입니다. 그런 다음 DataTemplates를 사용하여 사용자가 현재 어떤 페이지에 표시할지 결정합니다.

예전에는 일부 개체 (예 : 현재 사용자)에 대해 전역 싱글 톤을 사용했으며 ViewModels는 this에 대한 참조를 사용합니다 필요합니다. 그래서 페이지에 UserName을 표시하고 싶다면 UserName이라는 ViewModel에 속성을 가지고 있습니다. 그러면 반환됩니다. Global.Instance.CurrentUser.UserName

1

사용자 유형에 대해 PRISM을 살펴볼 것입니다. PRISM은 느슨하게 결합 된 MVVM 방식으로 WPF 응용 프로그램을 개발하기위한 패턴 모음입니다.

PRISM Region Manager Example

특히, 여러 화면의 귀하의 예를 들어 별도의 "지역"으로의 ViewModel (카트)의 다양한 표현에 대한 뷰를로드하는 "컨트롤러"를 사용하여 응용 프로그램의 상태를 관리 아마 것 좋은 출발이 되십시오. MSDN에는 composing user interfaces (지역)을 포함하여 getting started with PRISM에 관한 훌륭한 기사가있는 것으로 보입니다.

+0

필자가 필요하지 않은 경우 PRISM을 모두 사용할 필요가 없다는 점만 덧붙이고 싶습니다. 때로는 DI 컨테이너가 소규모 응용 분야에 적합 할 수 있습니다. – Jacob