2014-04-05 3 views
0

See the image다른 뷰 종속성?

이미지와 같은보기가 있으며 ViewModel에는 버튼 (1,2,3,4) 클릭을 처리하는 명령이 있습니다. 작업 영역에서 사용자가 입력을 허용합니다. 입력 된 사용자에 따라 버튼을 클릭 할 수 있습니다.

각 버튼은 하나의 새 창 (ViewModel을 통한보기, 입력에서 가져온 모델)을이 끕니다. 새 창에는 ViewModel에 삽입 된 모델에 따라 데이터를 표시하는 자체 논리가 있습니다.

MVVM 표준에 따라 각 단추에 대한 각각의 View 및 ViewModel은 어디에 지정해야합니까? (보기 /보기 모델에서). 어떻게 지정할 수 있습니까?

+0

PRISM을 사용하여 작업 영역의 영역을 정의한 다음 요구 사항에 따라 모듈/뷰를로드해야합니다. – Firoz

+0

답장을 보내 주셔서 감사합니다. 답장에 대한 정보가 빨간색으로 표시됩니다. 그러나 Prism/MVVM Light 대신 다른 직접적인 방법이 있습니까? 우리는 이미 응용 프로그램을 빌드했기 때문에. 모든 코딩을 변환하는 것은 그렇게 쉬운 일이 아닙니다. – vaduganathan

+0

여기에 표시 한 뷰 (Window.Show() 또는 Window.ShowDialog()) 위에 표시되는 뷰 창입니까, 아니면 작업 영역에 표시된 뷰입니까? – user3411327

답변

0

기본적으로 ViewModel은보기와 모델 간의 연결이기 때문에보기와 모델의 각 조합에는 별도의 ViewModel (유효한 경우)이 있어야합니다. 같은 더 고립되고 대한 언급이 없다 가능성이 더 높습니다 등등 아이콘, 고급 버튼과 (같은

  1. 작은 전망 : 내 경험에

    대부분의 경우 우리는 뷰 두 종류의 다루고있다 부모에 그들은) 관리 및 일반화하기 쉬운 그래서

  2. 큰 뷰와 같은 많은 아이들을 가지고
) 나중에 변경할 수 가능성이 더 높습니다 창, 패널 (같은

작은 뷰의 경우 일반 ViewModels를 여러 뷰에 사용할 수 있습니다. 하지만 큰 뷰 (향후 변경 가능성 고려)와 마찬가지로 단일 공유 ViewModel을 사용하지 않는 것이 좋습니다. 그러나 기본 ViewModel 클래스를 사용하여 일부 공유 기능 (있는 경우)을 구현하는 것이 유용합니다.

그래서 마음에 유지 및 표준 유지에 초점을 맞추고, 내가 제안 :

  • ViewModels for secondary windows : 각 자신의 독립적 인 기능이 (당신이 4 필요하다고 생각 질문에 따라) (당신이에서 그들 모두를 유도 할 수있다 BaseWindowVm). 여기서는 부모 (MainWindowVm)에 대해 알리고 인스턴스화 할 때 이벤트 처리기를 설정하는 것이 가장 좋습니다. 이렇게하면 코드 결합을 피할 수 있습니다.

  • MainWindowVm : 4 개의 명령과 다른 입력으로 구성됩니다.

    1. 세트 VM의 이벤트 핸들러 입력을 기반으로 ViewModel for secondary window
    2. 일부 VM을 추가 뷰의 DataContext에에 VM을 할당 인스턴스화보기를 인스턴스화 각 명령은 다음 단계를 수행합니다 MainWindowVm에있는 목록 (이 창을 계속 추적하려는 경우)
    3. ShowDialog()

가장 중요한 부분은 ViewModels가 서로 통신하므로 서로 뷰를 연결하면 더 복잡하고 관리하기 어려워집니다.그래서 Views는 ViewModels에 바인딩 된 섬과 같고 다른 모든 것은 ViewModels에 달려 있습니다.