2010-01-27 4 views
9

모두 WPF :개발 마법사 UI - WPF

마법사 응용 프로그램을 개발하면 사용자는 주 앱으로 가져 오기 전에 여러 가지 간단한 질문에 답해야합니다. 기본 응용 프로그램은 마법사에서 얻은 정보로 미리 채 웁니다.

나는 usercontrols를 추가 할 계획 인 Window로 시작했습니다. 기본 창에는 첫 번째 행에 사용자 정의 컨트롤이 있고 두 번째 행에있는 컨트롤 사이를 이동하는 것을 제어하기 위해 다음 및 이전 버튼이 있습니다. 내가 쉽게 논리를 제어 할 수있는이 방법은 같은 화면 사이를 전환합니다 :

WizardControl1.IsVisible = false; 
WizardControl2.IsVisible = true; 

그러나 어떤 이유로, 사용자 컨트롤에서 IsVisible에 대한 세터가 없습니다. 만세.

그러면 마법사의 각 섹션마다 별도의 창을 사용한다고 생각했습니다. 이 접근 방식의 문제점은 이제 단계가 진행될 때 창이 임의의 위치에서 열리고 다음 단계를 통해 마법사를 통해 단계적으로 다음 창이 무작위로 팝업되어 실제로 혼란스럽고 좌절하는 것입니다.

어떻게하면 마법사를 올바르게 개발할 수 있습니까? 나는 이것이 왜 그렇게 어려운지는 모르지만 ... 정확히 로켓 과학이 아니라 ... 텍스트/컨트롤을 대체하고 다음/이전을 누른 후에 입력을 저장하는 것!

감사합니다.

답변

3

저는 데이터 바인딩 및 템플릿 선택기를 사용하여이 문제를 해결할 수 있습니다. 마법사가 "WizardPage"기본 클래스 목록을 제공하는 "WizardData"클래스에 바인딩되도록하십시오.

WizardData 클래스는 양식의 올바른 정보를 정의하는 속성을 표시하고 템플릿 선택기를 사용하여 특정 마법사 페이지의 실제 유형을 기반으로 표시 할 적절한 컨트롤을 결정하는 기본 페이지의 컨트롤을 표시 할 수 있습니다.

실제보다 많은 소리가 들립니다. 또한 코드와 UI (모든 "작업"은 WizardData 및 WizardPage 클래스에서 수행됨)와 UI에 독립적 인 로직을 테스트 할 수있는 기능을 잘 구분할 수있는 이점을 제공합니다.

또한이 문제를 해결하기위한 매우 WPF/MVVM 방식이기도합니다.

+0

어떤 예제 나 시작하는 데 도움 수 있습니다 당신이 알고

잘 작동 탭 항목을 통해 이동합니다? "마법사 페이지 양식을"WizardPage "기본 클래스 목록을 제공하는"WizardData "클래스에 바인딩 시키십시오. – baron

+0

빠른 예제를 함께 게시 할 수 있는지 확인해 보겠습니다. – kyoryu

0

이 질문은 귀하의 질문에 직접적으로 부합하지 않는다는 것을 알고 있지만 가능한 대안으로 언급하고 싶습니다. Actipro의 Wizard 컨트롤을 사용해 꽤 좋은 결과를 얻었고 지원이 필요할 때 매우 반응이 좋았습니다. 나는 어떤 식 으로든 그들과 관련이 없다. 나는 위저드를 관리하기 위해 배관을 쓰지 않아도되는 것을 좋아한다.

0
  1. 속성을 "가시성"이라고합니다.
  2. 컨트롤을 숨기지 않고 동적으로 추가하고 제거 할 때 더 잘하는 것을 발견했습니다.
0

마법사 솔루션도 찾고있었습니다. Stock WPF 구성 요소를 사용할 필요가 있으므로 표준 폼과 탭 컨트롤을 사용하여 마법사를 구현했습니다.

런타임시 탭만 숨기므로 IDE에서 사용할 수 있습니다. 런타임에 그냥 사용, 다음, 마침 ...