2010-11-27 2 views
0

내가 가장 MVVM 방식으로이 작업을 수행하는 방법을 정말 잘 모르겠어요 삭제 탭을 닫으면 ... 기본적으로MVVM - 레코드가

내 주요 응용 프로그램의 모든 레코드를 표시하는 검색 창을 엽니 다 TabPanel. 그런 다음 레코드가 두 번 클릭되면 해당 레코드로 새 탭이 열립니다. 이제는 MVVM을 유지하려고 노력하고 있지만 사람이 레코드를 삭제할 때 gui tabitem을 닫는 방법을 알아낼 수 없습니다 (레코드가 사라지면 계속 열어 두어야합니다).

내가 지금 어떻게하는지 알아낼 수있는 유일한 방법은 DeleteCommand의 매개 변수로 TabItem의 인스턴스를 전달하는 것입니다.이 커맨드는 큰 No-No처럼 보이지만 실제로는 사용할 수 없습니다. 나에게이 일을 성취하는 방법이 나와있다.

답변

3

진정한 MVVM 의미에서이 작업을 수행하려는 경우 레코드를 두 번 클릭하면 레코드 모음에 레코드가 추가됩니다. 해당 레코드 컬렉션은 컨트롤의 탭에 대한 데이터 소스입니다. 목록에서 해당 항목을 제거하기 만하면 (일반적으로 ObservableCollection<T>) UI가 업데이트되고 탭이 제거됩니다.

현재 탭을 표시하기 위해 어떤 방법을 사용하고 있습니까?


편집 (응답 언급하는) :

은 즉이 없다 "true"로 MVVM. 탭이 단순한 레코드 이상이 될 수 있는지 여부는 중요하지 않습니다. 이러한 세부 사항을 추상화 한 View Model을 작성한 다음, View Model 인스턴스 (RecordViewModel, ReportViewModel 등)를 관찰 가능 콜렉션에두고 바인딩하십시오. 현재 탭이 바인딩되는 뷰 모델 유형에 따라 각 탭의 내용에 대한 올바른 뷰를 렌더링하려면 데이터 템플릿을 사용하십시오.

+0

간단히 TabItem을 만들어 TabCollection에 추가하면됩니다. 탭은 단순한 레코드 그 이상일 수 있기 때문에이 작업을 수행합니다. 보고서 (rdlc)가 포함 된 탭이나 SearchAllView가 포함 된 탭이있을 수 있습니다. –

1

조쉬 스미스 (Josh Smith)는 MVVM의 작동 방식을 설명하는 놀라운 기사를 썼습니다. 샘플 애플리케이션은 사용자가 원하는 것과 매우 유사한 것을 수행합니다.

응용 프로그램은 하나 이상의 작업 영역을 표시하는 TabControl을 표시합니다. 작업 영역에는 두 가지 종류의 항목이 표시됩니다. 탭 항목은 닫을 수 있습니다. 한번보세요, 이것이 당신의 문제를 해결할 것이라고 확신합니다.

WPF Apps With The Model-View-ViewModel Design Pattern

관련 문제