2009-09-09 5 views
0

특정 노드를 클릭 할 때 동적으로 채우는 Silverlight TreeView 컨트롤이 있습니다. 예를 들어, 노드의 1 세대 (레벨)를로드 한 다음 사용자가 노드 중 하나를 클릭하면 Selected 이벤트를 사용하여 해당 노드의 하위 항목 등을 채 웁니다. 데이터베이스에서 bool 각 노드 값이 새 노드에 하위 노드가 있는지 여부를 나타내는 값입니다.Silverlight에서 프로그래밍 방식으로 확장 화살표 표시 TreeView

아이가있는 새 노드 앞에 표시되도록 확장 화살표를 설정하려고하지만 캐치는 자식이 아직 채워지지 않을 것이라는 점입니다. 아마도 HasChild를 내 bool 값으로 설정한다고 생각했지만 HasChild는 읽기 전용입니다. 어떤 제안이라도 대단히 감사 할 것입니다.

답변

1

단지 화살표가 표시되도록 축소되었을 때 빈 treeviewitem을 추가하십시오.

그러나 사용자가 확장했을 때 비어있는 자식을 지우고 비동기 호출을 수행하여 실제 자식을 가져옵니다.

GetChildrenAsync 호출을 수행 할 때 UserState를 부모 treeviewitem 또는 id로 설정하십시오.

도착하면 UserState는 해당 항목 소스를 e.Result로 설정 한 부모를 찾으면 해당 부모 treeviewitem 또는 id 여야합니다.

+0

나는 공허한 아이를 생각하고 전에 그것을 시도했다. 그것은 대단히 잘 작동하지만 다음 특정 이름 (예 : 4555667)을 가진 특정 노드가 이미 있다고 말하는 일부 데이터에서이 이상한 오류가 발생합니다. 내 디버거를 통해 실행하고 내 데이터를 트리플 확인하지만 중복 될 곳을 볼 수 없습니다. –

+0

그건 나쁘지, 내 진짜 잘 밖으로 작동합니다. 다시 추가하기 전에 기존 자녀를 삭제 하시겠습니까? 어떤 방법이나 구성 요소가 오류의 원인인지 알 수 있습니까? – Paully

+0

저는 노드를 채우는 두 가지 함수, 즉 초기 채우기를 수행하는 함수와 모든 하위 시퀀스 자식을 수행하는 함수를 갖습니다. 내 첫 번째 함수는 완벽하게 채워질 것이다. 한 예를 들면, 나는 그들 중 4 명이 아이들 (빈 아이들)을 가진 10 개의 기록을 가지고있다. 자식 채우기 기능을 실행할 때 노드에 자식 노드가있는 자식 노드가 두 개 이상 포함되어 있으면 노드에 해당 이름이 이미 있음을 알 수있는 오류가 발생합니다 (모든 노드의 이름을 노드의 ID로 지정하고 데이터 중복이 없음을 확인했습니다.) 제 코드를보고 싶습니까? –

0

종속성 속성에 익숙하다면 xaml의 코드 및 gettable에서 설정할 수있는 종속성 속성을 만들어 바인딩 할 수 있습니다.

이렇게하면 ValueConverter를 사용하여 화살표의 가시성을 렌더링 할 수 있습니다.

+0

나는 당신의 제안 방법을 사용했지만, 나는 다음과 같은 오류 얻을 : Silverlight 응용 프로그램에서

처리되지 않은 오류는 읽기 전용 속성 HasItems을 설정할 수 있습니다.

TreeViewItem TVI = 새로운 TreeViewItem : System.Windows.Controls.TreeViewItem.OnHasItemsPropertyChanged (등, 어쩌구 저쩌구 ..)에서 다음

내가 내 TreeViewItem의 종속성 속성을 업데이트하려고하는 데 사용되는 코드는() {Header = x.UserName, Name = x.UserName}; tvi.SetValue (TreeViewItem.HasItemsProperty, true);

나는 아마 뭔가를 놓치고 있습니다. 고맙습니다! –

+0

HasItems는 항목 수가 0을 초과하는지 여부를 반영합니다. 따라서 직접 설정하지 않고 항목이 있는지 확인하십시오. –

+0

항목이 있다고 생각하도록 위조 할 필요가 있습니다. 실제로 그 시간에 항목이 채워져 있지 않습니다. –

관련 문제