2009-06-18 2 views
1

Winforms TreeView 컨트롤에서 일부 계층 적 데이터를 가지고 있으므로 발표자가 변경 내용을 동기화 할 수 있도록이를 속성으로 표시해야합니다. 그냥 분명히, 나는 수동보기 패턴을 사용하고 있습니다. 대부분의 WinForm 컨트롤을 사용하면 이것은 간단합니다. 컨트롤 자체는 데이터를 발표자에게 쉽게 전달할 수있는 시스템 유형으로 노출합니다. TreeViews는 복잡성 때문에 시스템 유형에 쉽게 매핑되지 않습니다. 프레임 워크 컬렉션 유형을 찾았지만 나무가 간과 된 것 같습니다. (Microsoft는 나무에게 클래스를 몇 가지 높은 수준의 클래스의 후드 underneith 트리 구조를 사용하는 것처럼 보이지만 일반 목적의 패밀리를 작성하고 싶지 않아하십니다.) 어떤 경우TreeView 컨트롤의 계층 적 데이터를 MVP 발표자에 어떻게 표시해야합니까?

내가 노출하기 위해 노력하고있어 데이터보다 결코 더 두 노드가 깊어서 TreeView를 계속 사용할 지 확신 할 수 없습니다. 표현자를 TreeNodeCollection에 묶는 것을 피하는 더 많은 이유가 있습니다.

이미 몇 가지 아이디어를 제공했지만 난 그냥 SO 커뮤니티 그들을 반송 싶어 :

  • 이 컬렉션의 컬렉션으로 나무를 노출을 ... 말 목록의 사전.
  • 프로세스의 뷰에 종속성을 도입하여 사용자 정의 트리 구조를 만듭니다. 자신의 자식 노드는 이론적으로 3 또는 4

    어떤 제안이 이상 가지 않을 것이다 50 만 실제로 높은 수를 칠 수 있지만

최상위 노드 5-10 항목을 평균 것인가? 내가 그들의 경험이없는

:

답변

0

여기에 트리 컬렉션 구현을 포함하는 세 무료 .NET 라이브러리에 대한 링크입니다 . 이것은 성능에 의존하는 응용 프로그램 인 경우

+0

감사합니다. 타사 트리 구현이 하나의 대안입니다.그것은 여전히 ​​뷰에 추가 종속성을 도입 할 것이지만. –

0

, 내가

+0

트리보기에 표시되는 데이터가 자주 업데이트되지 않으므로 성능에 문제가 없습니다. 저는보기와 발표자를 깨끗하게 분리하는 것에 더 관심이 있습니다. –

3

난 당신이 반대 방향으로 생각하는 것 같아요 트리를 기반으로 컬렉션의 사용 agianst 좋을 걸 : 어떻게 볼에 계층 구조를 노출 발표자한다 . 그리고 당신은 추상적 관점에서 그 견해를 생각해야하고 구체적인 구현 (당신의 경우에는 TreeView)에 너무 집중하지 않아야합니다. 일반적으로 MVP 패턴을 사용하여 항목을 구현하기 시작할 때보기 인터페이스를 정의하면서 동시에 발표자 논리를 작성하기 시작합니다. 이상적으로는 TDD와 뷰의 모의 구현을 사용하여이 작업을 수행 할 수 있습니다. 그래야만 구체적인보기 (윈도우 폼 또는 컨트롤)를 구현할 수 있습니다.

그래서 모델을 만들어야 만 뷰에 전달됩니다. 사용자 지정 계층 구조를 구현하는 것이 좋습니다 (Composite pattern 참조).

보기의 구현은 TreeView 노드의 Tag 속성과 모델의 요소 사이를 매핑 할 수 있습니다.

+0

TDD와 mock을 사용하여 구현을 유도하고 있습니다. 빈 폼이 내보기 인터페이스를 구현하므로 인터페이스를 추가 할 때마다 폼을 구현하는 양식에 추가됩니다. 이 경우에는 이미 트리보기를 사용하기위한 아이디어가 있지만 뷰나 프리젠터를 불필요한 종속성없이 오염시키지 않고 사용하는 방법을 알 수 없습니다. 좀 더 복잡한 뷰 구현을 희생 시키더라도 단순화 된 뷰 인터페이스에 기대고 있습니다. 나는 항상 나중에 리팩터링 할 수있다. –