2012-12-15 3 views
1

일부 그룹화 된 데이터에 바인딩 할 수있는 꽤 표준 WinJS ListView 설치가 있습니다.WinJS ListView 동적 그룹화

앱 설정에 따라 그룹화 표시 여부를 변경하고 싶습니다. 나는 부분적으로 할 수있는 페이지가로드 될 때를 확인하고과 같이 설정 그룹화 속성을 건너 뛰는하여 :

  if (!Data.getCategoryGrouping()) { 
       var content = element.querySelector(".itemspage"); 
       content.className += " noGroup"; 
       listView.groupHeaderTemplate = null; 
       listView.groupDataSource = null; 
      } 
      else { 
       listView.groupHeaderTemplate = element.querySelector(".headerTemplate"); 
       listView.groupDataSource = Data.groups.dataSource; 
      } 

을하지만, 페이지가 이미 표시되고 사용자가 설정을 조정하는 경우에도 경우에 도움이되지 않습니다. (그리고 솔직히 어쨌든 그것에 대해 갈 가장 좋은 방법은 아닐 것입니다.)

어떤 생각이 들었습니까?

답변

1

페이지를로드 한 후에 그룹화를 해제하려면 groupDataSource를 null로 설정할 수 있습니다. 이처럼 ...

q("#myButton").onclick = function(e) { 
    myListView.groupDataSource = null; 
}; 

그리고 당신이 할 수있는 단지 같은 그 버튼이 토글은 ...

q("#myButton").onclick = function(e) { 
    if (myListView.groupDataSource != null) myListView.groupDataSource = null; 
    else { myListView.groupDataSource = myGroupedList.groups.dataSource; } 
}; 

BTW, 대신 당신이 당신의 코드에하던대로 content.className += " noGroup";를 사용, 난 당신을 추천합니다 content.classList.add("noGroup");을 사용하십시오.

+0

감사합니다 잭 - 클래스 목록을 변경했습니다. :-) groupDataSource를 사용하면 매우 유사한 작업을 수행하고 있습니다. 내 문제는 페이지가 이미 표시되어있는 동안 해당 변경 사항을 적용한 다음 해당 목록 뷰가 해당 변경 사항에 올바르게 응답하도록하는 것 같습니다. –

+0

그건 이상합니다. 나는 약간의 테스트를 거쳤고, 그렇게하면 ListView가 변경된 것을 볼 수 있습니다 (그룹화 한 다음 그룹화하지 않음). ListView 이벤트를 새로 고치기 위해 연결하지 않습니다. 그것은 독자적으로 발생합니다. –