Расширение события Checked в производном элементе управления TreeView - как временно удалить обработчики событий? - PullRequest
1 голос
/ 29 июля 2011

Существует элемент управления RadTreeView (версия Silverlight), который я хотел бы расширить (наследовать от). Давайте назовем новый элемент управления MyTreeView.

Единственное, чего я хотел бы добиться, это то, что когда элемент отмечен в MyTreeView, он автоматически проверяет все его дочерние элементы. Кроме того, если после проверки узла у его родителя проверены все его дочерние элементы, я бы также хотел проверить родительский элемент. Это будет проходить рекурсивно по всему дереву вплоть до корня. Кажется, я не могу найти эту функцию по умолчанию.

Мне не нужно решение для рекурсивного алгоритма, который бы проверял элементы, я могу легко справиться с этим самостоятельно. Проблема в том, что пользователь может подписаться на события Checked и Unchecked. Таким образом, если пользователь подписался на событие Checked, при проверке элемента будут проверяться все его дочерние элементы, что вызывает событие для каждого дочернего узла, которое было автоматически проверено в результате проверки его родительского элемента. В моем сценарии это нежелательное поведение . Я хочу, чтобы событие запускалось только для проверенного вручную элемента , а не для любого другого узла, который будет автоматически проверен как следствие.

Я думал, что могу переопределить метод OnChecked, но он либо закрытый, либо такого метода нет, поэтому у меня нет доступа к нему. Я мог бы добавить другой обработчик события к событию Checked в конструкторе, который вызывался бы до того, как другие обработчики событий подписались на событие, но это не мешает дочерним узлам вызывать событие. Я хотел бы иметь возможность временно отписаться от обработчиков на Checked, а затем повторно подписать их после проверки узлов. Однако, поскольку я не знаю, кто подписан на событие, я не могу отписаться от них вручную (это общедоступное событие) и, похоже, не могу получить список вызовов.

Есть ли способ перебирать подписанные события или любые другие способы их временного отключения? Есть ли лучший подход к описанной проблеме?

1 Ответ

1 голос
/ 22 августа 2011

Существует свойство RadTreeViewCheckEventArgs.IsUserInitiated, которое вы можете использовать.

...