2011-07-29 2 views
1

Telerik의 RadTreeView (Silverlight 버전) 컨트롤이 있습니다. 상속 받고 싶습니다. 새 컨트롤 MyTreeView을 호출하십시오.파생 된 TreeView 컨트롤에서 체크 이벤트 확장 - 이벤트 처리기를 일시적으로 제거하는 방법?

항목에서 MyTreeView을 체크하면 모든 하위 항목이 자동으로 선택됩니다. 또한 노드를 검사 한 후 부모가 모든 자식을 검사 한 경우 부모를 확인하고 싶습니다. 트리를 통해 루트까지 재귀 적으로 이동합니다. 기본적으로이 기능을 찾을 수없는 것 같습니다.

항목을 확인하는 재귀 알고리즘에 대한 솔루션이 필요하지 않으며, 쉽게 관리 할 수 ​​있습니다. 문제는 사용자가 CheckedUnchecked 이벤트를 구독 할 수 있다는 것입니다. 따라서 사용자가 Checked 이벤트에 가입 한 경우 항목이 선택 될 때마다 모든 하위 노드가 검사되어 상위 노드 확인 결과 자동으로 확인 된 각 하위 노드에 대한 이벤트가 발생합니다. 제 시나리오에서는 바람직한 동작이 아닙니다. 수동으로 검사 한 항목에 대해서만 이벤트가 으로 시작되도록하고 결과로 자동으로 검사되는 다른 노드에 대해서는 표시하지 않습니다.

나는 OnChecked 메서드를 재정의 할 수 있다고 생각했으나 비공개이거나 그러한 메서드가 없으므로 액세스 할 수 없습니다. 생성자의 Checked 이벤트에 다른 이벤트 처리기를 추가 할 수 있습니다. 다른 이벤트 처리기가 이벤트에 가입하기 전에 호출되지만 자식 노드가 이벤트를 발생시키지 않습니다. 임시로 Checked에있는 핸들러를 등록 취소 한 다음 노드를 점검 한 후 핸들러를 다시 등록 할 수 있습니다. 그러나 누가 이벤트에 가입했는지 모르기 때문에 수동으로 구독을 취소 할 수는 없습니다 (이벤트는 공개). 호출 목록을 가져올 수없는 것 같습니다.

가입 한 일정이나 다른 방법을 통해 반복적으로 일시 중지 할 수 있습니까? 설명 된 문제에 대한 더 나은 접근 방법이 있습니까?

답변

1

사용할 수있는 RadTreeViewCheckEventArgs.IsUserInitiated 속성이 있습니다.

+0

예, 이미 IsUserInitiated 속성을 찾았습니다. 그것은 내 문제를 해결합니다. tri-state 옵션에는이 기능이 이미 있지만 세 가지 상태를 모두 원하지는 않습니다. 그래서 나는 IsUserInitiated를 고수 할 것입니다. –

+0

IMHO 아무도 다른 문제가 없다면 자신의 질문에 답하는 것은 잘못된 것이 아닙니다. 누군가 결국 같은 문제에 부딪 힐 수밖에 없기 때문입니다. :) –

+0

물론,하지만 오래 전에 해결책을 찾지 못했기 때문에 나는 대답을 잊어 버렸습니다. 시간이 지남에 따라 대답하겠습니다. :) –

관련 문제