У меня есть XAML, похожий на этот:
<ListBox ItemsSource="{Binding SearchCriteria, Source={StaticResource model}}" SelectionChanged="cboSearchCriterionType_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Name="spCriterion" Orientation="Horizontal" Height="20">
<ComboBox Name="cboSearchCriterionType" Width="120" SelectionChanged="cboSearchCriterionType_SelectionChanged">
<ComboBox.Items>
<ComboBoxItem IsSelected="True" Content="Anagram Match" />
<ComboBoxItem Content="Pattern Match" />
<ComboBoxItem Content="Subanagram Match" />
<ComboBoxItem Content="Length" />
<ComboBoxItem Content="Number of Vowels" />
<ComboBoxItem Content="Number of Anagrams" />
<ComboBoxItem Content="Number of Unique Letters" />
</ComboBox.Items>
</ComboBox>
<TextBox x:Name="SearchSpec" Text="{Binding SearchSpec}" />
<TextBox x:Name="MinValue" Text="{Binding MinValue}" Visibility="Collapsed" />
<TextBox x:Name="MaxValue" Text="{Binding MaxValue}" Visibility="Collapsed" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Как вы можете видеть из разметки, у меня есть список, связанный с коллекцией объектов SearchCriterion (собирательно содержащихся в объекте SearchCriteria). Идея состоит в том, что пользователь может добавлять / удалять элементы критериев из критериев, каждый критерий представлен элементом списка. Внутри элемента списка у меня есть комбинированный список и три текстовых поля. Я пытаюсь изменить видимость элементов управления TextBox в зависимости от элемента, выбранного в ComboBox. Например, если пользователь выбирает «Сопоставление с образцом», я хочу показать только первое текстовое поле и скрыть два последних; и наоборот, если пользователь выбирает «Длина» или любой из элементов «Количество ...», я хочу скрыть первый текстовый блок и показать два последних.
Каков наилучший способ добиться этого? Я надеялся сделать что-то простое в обработчике событий SelectionChanged для комбинированного списка, но элементы управления текстовым полем, по-видимому, выходят за пределы области действия события SelectionChanged. Нужно ли программно проходить иерархию элементов управления и находить элементы управления?