我有类似的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对象中)。想法是用户可以从标准中添加/删除标准项,每个标准由列表框项表示。在列表框项目中,我有一个组合框和三个文本框。我要做的是根据ComboBox中选择的项目更改TextBox控件的可见性。例如,如果用户选择“模式匹配”,那么我想只显示第一个文本框并隐藏后两个;相反,如果用户选择“长度”或任何“数量...”项,那么我想隐藏第一个TextBox并显示后两个。
实现这一目标的最佳方法是什么?我希望在组合框的SelectionChanged事件处理程序中做一些简单的事情,但文本框控件可能不在组合框的SelectionChanged事件范围内。我是否必须以编程方式遍历控件层次结构并找到控件?
答案 0 :(得分:0)
您可以将可见性绑定到组合框所选项目,然后使用值转换器返回可见性。 here is a demo of how to do Binding Converters可能对您有帮助。
<TextBox x:Name="MinValue" Text="{Binding MinValue}" Visibility="{Binding SelectedItem, ElementName=cboSearchCriterionType, Converter={StaticResource MyConverter}}" />
// declare the converter in xaml....
<SomeElement.Resource>
<local:MyConverter x:Key="MyConverter"/>
</SomeElement.Resource>
public class MyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// value will be the combobox.selecteditem
// do stuff and return the visibility
}
}