Один из способов сделать это - использовать концепцию ViewModel. ViewModel - это структура данных, которая представляет представление пользовательского интерфейса приложения, это модель (данные) + информация, обычно необходимая для пользовательского интерфейса.
В вашем примере у вас может быть новый класс, который оборачивает ваши данные (доступный через свойство, скажем, скажем, Model) и имеет дополнительные свойства, такие как логическое значение IsVisible. INotifyPropertyChanged должен быть реализован этим классом
Если я копирую и изменяю шаблон, указанный в упомянутой статье:
<TreeView.ItemTemplate>
<!-- Level 0 template leaves space for 2 child "Toggle" levels -->
<HierarchicalDataTemplate ItemsSource="{Binding Model.SubItems}">
<Grid Visibility={Binding IsVisible, Converter={StaticResource B2VConverter}}>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Task"/>
<ColumnDefinition SharedSizeGroup="Toggle"/>
<ColumnDefinition SharedSizeGroup="Toggle"/>
<ColumnDefinition SharedSizeGroup="Duration"/>
<ColumnDefinition SharedSizeGroup="Notes"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Model.Task}" Style="{StaticResource TextBlockStyle}"/>
<TextBlock Grid.Column="3" Text="{Binding Model.Duration}" Style="{StaticResource TextBlockStyle}"/>
<TextBlock Grid.Column="4" Text="{Binding Model.Notes}" Style="{StaticResource TextBlockStyle}"/>
</Grid>
...
Новыми являются (я не могу выделить жирным шрифтом текст, который я добавил), настройка свойства IsVisible на уровне сетки и ссылки на свойство данных, где «Модель». был добавлен. Он связан с новым свойством IsVisible через конвертер, который вы должны объявить на уровне ресурсов:
Теперь вы модифицируете свою ViewModel, когда хотите скрыть или показать элемент в дереве. Так просто.
Это грубое введение в способ программирования MVVM. Вы найдете много литературы об этом. У него довольно много преимуществ, таких как возможность модульного тестирования логики пользовательского интерфейса (т. Е. При каких обстоятельствах элемент дерева должен становиться видимым?).
Более простой, менее модульный способ сделать то, что вы запрашиваете, - добавить свойство IsVisible непосредственно в модель, но это не рекомендуется, так как смешивает яблоки и апельсины. Это может быть хорошо для очень маленькой программы, которая используется в течение нескольких дней, а затем выбрасывается.