WPF TreeView: обратный вызов для выбранного дочернего узла/элемента

avatar
Carlos
1 июля 2021 в 18:30
36
1
0

Рассмотрите следующее TreeView в WPF:

Parent node 0
|-> Child node 0
    |-> Grandchild node 0
    |-> Grandchild node 1
    |-> ...

Его можно определить с помощью XAML следующим образом:

<TreeView>
    <TreeViewItem Header="Parent node 0">
            <TreeViewItem Header="Child node 0" ItemsSource="{Binding Path=MyStringEnumerable}" Selected="TreeViewItem_Selected" />
    </TreeViewItem>
</TreeView>

Где MyStringEnumerable — это IEnumerable<string>. Обратный вызов TreeViewItem_Selected вызывается при выборе дочерних или внучатых узлов/элементов. Проблема в том, что я хочу, чтобы этот обратный вызов вызывался только при выборе узлов/элементов Grandchild. Как я могу реализовать это с минимальными изменениями кода? В идеале я хотел бы иметь событие ChildSelected вместо Selected, но это недоступно.

Источник

Ответы (1)

avatar
lidqy
1 июля 2021 в 18:44
0

Я бы использовал шаблон иерархических данных, и, учитывая, что Grandchild и Child также относятся к разным типам (viewmodel) - только прикрепите обработчик событий к шаблону для Grandchild. В противном случае, если это тот же тип, используйте селектор шаблона. Также я бы рекомендовал привязать свойство модели представления к свойству IsSelected элемента дерева, а не обрабатывать событие в коде позади.