2010-12-10 5 views
0

MVVM에 TreeView 및 Ria Services가있는 Silverlight 4 App을 작성하여 계층 적으로 고객을 표시합니다. 데이터베이스에서 모든 고객을로드하지 않으려 고 대신 정점을 확장하여 다시로드하려고합니다. MVVM Pattern을 사용하여이 작업을 수행 할 수 있습니까?Silverlight 4 MVVM TreeView 컨트롤

데이터베이스 고객 모델에는 "Parent_id"관계가 있고 "child_id"가 없습니다!

고맙습니다.

답변

1

예, 가능합니다. 그러나 그것이 합법적 인 일임을 알리십시오.

  • 아이디
  • 제목 (트 리뷰 참조)
  • ChildItems (실제 수집 또는 (parentId에 의해 childitems을 수신에 사용) :

    은 우선, 다음과 같은 특성을 가진 뷰 모델을 가져야한다 빈 항목)

  • 으로 IsExpanded
  • ISBLANK (이 항목은 하위 항목과
) 아직로드되지 않은 경우

처음에는 이러한 모델의 목록이 있지만 컬렉션 ChildTtems는 빈 항목으로 구성되어야합니다. 하위 항목 컬렉션이 비어있는 경우 상위 항목을 확장 할 수 없습니다.

다음 단계 - IsExpanded 속성을 바인딩하십시오. 해결책은 this link에 있습니다.

private bool isExpanded; 

    public bool IsExpanded 
    { 
     get { return isExpanded; } 
     set 
     { 
      isExpanded = value; 
      OnPropertyChanged("IsExpanded"); 
      if(isExpanded) 
       this.UpdateChildItems(); 
     } 
    } 

    public ObservableCollection<HierarchyViewModel> ChildItems { get; set; } 

    void UpdateChildItems() 
    { 
     //Check wheter the child items are blank (this.ChildItems.Any(ci=>ci.IsBlank)) 
     //and if answer is yes, receive real items from service, 
     //transform each of them to a viewmodel class and set IsBlank=false 
    } 

또한 각 항목에 대해 여러 하위 항목을 받고 빈 항목 모음을 생성해야합니다.

+0

감사합니다. 그러나 Silverlight의 XAML에서 "IsExpanded"바인딩을 설정할 가능성이 없습니다. TreeView 및 TreeViewItem 클래스를 서브 클래 싱하여 바인딩을 하드 코딩해야합니다. – Tom

+0

예, 파생 클래스가 있어야하지만 문제가 없습니다.이 클래스는 동일한 속성을 가지며 같은 방식으로 스타일을 지정할 수 있기 때문입니다. – vorrtex