저는 WPF/MVVM에 비교적 익숙하지 않습니다. 우리의 현재 WPF 프로젝트는 여전히 프로토 타입 어플리케이션이며, 이는 우리가 메인 레이아웃을 설계하지 않았다는 것을 의미합니다. 그러나 우리는 보고서를 디자인했습니다. 보고서에 따르면 UserControl
은 각각 ComobBox
또는 TextBox
과 같은 구성 컨트롤이 있고 일부는 DataGrid
, Graph
은 , ViewModel
은 표시하려는 데이터에 대한 컨트롤이 있습니다. 아직 프로토 타입이므로 Window
을 새로 열면 UserControl
중 하나가 표시됩니다. 앞으로는 Visual Studio의 레이아웃처럼 메인 윈도우 안의 다른 지역에 다른 UserControl
을 배치하도록 변경할 수 있습니다. 가장 중요한 점은 우리의 어플리케이션에는 거의 백 가지의 그러한 UserControl
또는 우리가보고 한 것을 포함 할 것입니다. 따라서 정적 레이아웃/MainView를 사용했던 이전 작업 프로젝트와는 다릅니다.새 ViewModel을 사용할 수있는 시점에서 새보기 열기?
아직 좋은 아키텍처를 찾지 못했습니다. 우리의 고전적인 사용 시나리오는 사용자가 메뉴 보고서에서 선택할 수 있도록하는 것입니다. 따라서 우리는 Command
(MainViewModel 또는 보고서의 ViewModel에서) 객체를 사용하여 새 보고서를 엽니 다. 그래서 기본적으로 Command
은 새로운 ViewModel
(ViewModel
첫 번째 경우)을 생성하고 이에 해당하는 View
을 생성해야합니다 (누구에 의해 생성됩니까?). 새로 생성 된 UserControl
을 포함하여 마지막으로 Window
이 열립니다.
가 나는 두 가지 서비스가 필요 추측 : 새로운-뷰 모델 생성 이벤트를 구독
서비스를, 그리고 같은 이벤트가 발생할 때
UserControl
를 해결.(현재 프로토 타입 응용 프로그램의 경우) 1) 서비스에 의해 게시 된 new-UserControl 생성 이벤트에 가입 한 다음이를 표시하는 새 창을 엽니 다.
그리고 나중에 실제 적용을 위해 2) 서비스를 변경하여 다른 지역에 배치 할 수 있습니다. 두 번째로, 간단하고 임시적인 것입니다. MainView의 코드 숨김에 EventAggregator
을 사용하여 이벤트를 구독하고 Window
을 새로 생성하는 객체를 하나만 가질 수 있습니다. 맞습니까?
누군가가 이것을 어떻게 달성해야하는지 말해 줄 수 있습니까?
MEF를 살펴보십시오. http://msdn.microsoft.com/en-us/library/dd460648(v=vs.110).aspx. 그것은 1 차 서비스 (View는 ViewModel을 임포트 할 수 있습니다) 역할을 할 수 있습니다. – amnezjak
@amnezjak 올바르게 이해하지 못할 수도 있습니다. 하지만 내 감정은 우리의 앱이'ViewModel'과 비슷하다는 것입니다. 예를 들어 하나의'ViewModel'에있는 하나의'Command' 객체가 실행되어 다른 다른'ViewModel'을 생성하고 그에 대한'View'를 해결해야합니다. . 그러나 당신의 제안에서,'View'는'ViewModel'을 수입합니다. BTW, 누가이 상황에서'보기'를 생성 할 책임이 있습니까? – tete