2009-10-02 5 views
1

레코드 목록을 그래픽으로 표시하는 목록 페이지가 있습니다. 일부 그래픽 부분 또는 일부 단추 (페이지의 런타임 추가됨)를 클릭하면 일부 데이터를 매개 변수로 전달하여 새 페이지를 활성화하려고합니다.MVVM-WPF의 일부 이벤트에서 새 페이지를 활성화하는 방법은 무엇입니까?

예 : 카테고리 목록 페이지가 있습니다. UI 표현은 런타임에 완료됩니다. 그래서 어떤 카테고리를 클릭하면 해당 제품을 다른 페이지에 나열하려고합니다. CategoryID,

이제 내 문제는 WPF의 MVVM patern에 새 페이지를 활성화/표시하고 있습니다. 여러분의 소중한 제안에 미리 ASP.Net

에서 그냥 Response.Redirect를 같은

감사합니다.

답변

2

이것은 실제로 "MVVM 일"이 아니며 화면을 활성화하는 데있어 더 많은 질문입니다.

MyAppService.ShowDetails(currentID); 

당신은 할 수있다 : 당신은 당신이 단순히 뭔가를 할 수있는 명령 중 하나를 응용 프로그램의 상태를 유지하거나 세부 정보에 다음 뷰의 표시 (그리고 아마도 너무 ViewModels의 최대 배선) 처리 결과 핵심 서비스를 할 수 있습니다 PRISM 지역 시스템 및 일부 아키텍처 예제에 대한 참조 PRISM Stock 응용 프로그램을 살펴보고 싶습니다. UI가 어떻게 구성되어 있는지에 따라 많은 차이가 있지만 잘하면 적어도 몇 가지 아이디어를 줄 것입니다.

+0

Yaa하지만 MVVM에서는 표준을 따라야합니다. 그렇지 않으면 새 Window의 인스턴스를 만들고 Show() 메서드를 호출 할 수 있습니다. 그러나 MVVM에는 일부 Workspaces-Command-PropertyChanged 메커니즘이 있습니다. 그렇다면이 표준을 사용하여 달성하는 방법은 무엇입니까? –

+2

MVVM은 풍부한 바인딩을 증명하는 데이터에서 프리젠 테이션을 분리하는 것으로 전체 응용 프로그램 아키텍처를 다루는 "슈퍼 패턴"이 아닙니다! 다른 아키텍처 패턴에 추가로 * 사용합니다. MVVM이 간다면 Commanding을 통해 세부 정보를 볼 수있는 요청을 받게되지만 다른 화면을로드하는 방법을 알면 VM의 책임이 아닙니다! –

0

MVVM에서이 작업을 수행하는 데는 몇 가지 방법이 있습니다. 스티브 로빈스 (Steve Robbins)는 "다른 화면을로드하는 방법을 아는 것은 VM의 책임이 아닙니다"라고 동의하지만, 새로운 화면을 표시해야하는 상황이 발생했다는 통지를받는 것은 VM의 책임입니다. 뷰가 필요에 따라로드되고 언로드되는 객체에 대한 알림. 기억해야 할 점은 각 VM이 뷰에 바인딩되고 새 뷰가 표시되면 VM이 대체된다는 점입니다. 따라서 경영진의 성격 상 대체해야 할 것이 있습니다.

그런 이유로 Composite WPF (프리즘) 프레임 워크가 많은 주목을 받고 있습니다. 나는 당신이 프리즘을 배우기 전에 제기 한 것과 같은 이슈로 고심했다. 카테고리 목록이 항목 컨트롤에 표시되고 있다고 가정합니다. 기본적으로, 상황에 따라 아마 컨트롤의 SelectedItem 속성을 VM의 SelectedItem 속성에 바인딩 할 것입니다. 그 속성의 setter에게 MVVM 메서드를 호출하여 선택의 프리즘 프레임 워크에 알리고 속성 설정자에게 전달 된 SelectedItem을 전달합니다. 프리즘을 사용하여 모듈을 페이지를 표시해야합니다.

프리즘에 대한 좋은 점은 제품 페이지가 카테고리 페이지를 대체하기를 원한다면 작동하고, 동일한 창에서 카테고리 창 옆에 제품 패널을 표시하려는 경우에도 효과가 있다는 것입니다 . 셸 (기본 창)을 설정할 때 영역 하나 또는 두 개를 지정하는 것이 간단합니다.

프리즘에 대한 학습 곡선이 있지만 매우 가파르지는 않습니다. MVVM과 잘 작동하며 파티셔닝의 이점을 누릴 수있는 모든 응용 프로그램을위한 훌륭한 프레임 워크입니다. WPF 응용 프로그램 디자인의 핵심 요소라고 생각합니다.

0

데이터 조작을위한 명령과 탐색을 위해 코드를 사용하여이 문제를 해결할 생각이었습니다. 차이점은 다음과 같습니다. 데이터베이스에 접촉하고 테스트 할 수 있어야합니다. VM의 ICommand 여야합니다. 탐색은 코드 뒤에 있어야합니다. 앱 디자인이 작업을 혼합하지 않아야하며 항상 실행 가능한 것은 아니라는 점을 알고 있습니다.

관련 문제