저는 WPF 및 MVVM을 처음 사용하며 두 가지 모두를 활용하는 응용 프로그램을 작성하고 있습니다. 응용 프로그램은 Windows 탐색기와 유사하므로 메뉴가 포함 된 주 창 (ShellViewModel), 트리 컨트롤 (TreeViewModel) 및 목록 컨트롤 (ListViewModel)이있는 응용 프로그램을 고려하십시오. 편집 (Edit) -> 삭제 (Delete)와 같은 메뉴 항목을 구현하여 현재 선택된 항목 (트리 또는 목록에있을 수 있음)을 삭제합니다.WPF에서 현재 선택에 의존하는 메뉴 항목을 구현하는 방법 MVVM 탐색기와 유사한 응용 프로그램
Josh Smith의 RelayCommand를 사용 중이며 ShelluitModel의 MenItem을 DeleteItemCommand에 바인딩하는 것은 쉽습니다. 그러나 DeleteItemCommand를 구현하는 것처럼 보이지만 포커스/선택을 추적하고 구현을 위해 적절한 자식에게 작업을 지시하기 위해 ShellViewModel과 두 자식 뷰 모델 (TreeViewModel 및 ListViewModel)간에 상당히 긴밀한 결합이 필요합니다. 그건 나에게 잘못된 것처럼 보이고 내가 뭔가를 놓치고 있다고 생각하게 만든다.
부기를 수행하기 위해 포커스 관리자 및/또는 선택 관리자를 작성하는 것이 그리 어려운 일은 아니며 클래스를 함께 연결하지 않고도 수행 할 수 있습니다. 윈도우 시스템은 이미 어떤 뷰에 포커스가 있는지 추적하고 있으며 코드를 복제하는 것처럼 보입니다.
내가 모르는 부분은 ShellViewModel에서 ListViewModel 또는 TreeViewModel으로 명령을 라우팅하여 코드 엉망을 만들지 않고 실제 작업을 수행하는 방법입니다. 언젠가 두 명 이상의 어린이를 포함하도록 신청서가 연장 될 것이며 가능한 한 어린이의 연장을 가능한 한 아프게 할 수 있도록 껍질을 어린이들에게 알리고 싶습니다.
일부 샘플 WPF/MVVM 응용 프로그램 (Karl Shifflett 's CipherText, Josh Smith's MVVM Demo 등)을 보면이 작업을 수행하는 코드를 보지 못했습니다. 또는 이해하지 못했습니다.
내 접근 방식이 근거가 없다고 생각하든, 약간의 뉘앙스가 누락 되었는가에 관계없이 의견을 공유하고 다시 정상적으로 돌아 오도록 도와주세요. 감사!
Ward Bell의 게시물에 대한 링크를 제공해 주셔서 감사합니다. 나는 그것이 내 질문에 어떻게 적용되는지 100 % 확실하지 않다.내 문제의 가능한 해결책으로 Event Aggregation에 대한 참조를 언급하고 있습니까? – Doug
예, 서로 다른 ViewModel 간의 통신 수단으로 Event Agg를 사용해야합니다. 그들은 서로에 대한 어려운 언급을해서는 안됩니다. MVVM 아키텍처 개요에 대한 또 다른 좋은 참고 자료는 Rob Eisenberg의 Mix 10에서 자체 MVVM 빌드 (http://live.visitmix.com/MIX10/Sessions/EX15)입니다. –