我已经建立了一个ComboBox
大约有 20 个ComboBox items
的。我希望能够限制用户单击复选框时可以看到的数量,例如
if (checkbox1.ischecked)
{
combobox1.items = item 1, item 2 // correct code here
}
一直在搜索网络和 MSDN 等,我什至不确定是否有可能在正确的方向上提供任何指针
基本上,您必须决定添加哪些项目以适合您,但在此示例中,我只选择前 5 个项目:
if (checkBox1.IsChecked)
{
ObservableCollection<YourItemType> filteredCollection = originalItemsSource.Take(5);
comboBox1.ItemsSource = filteredCollection;
}
else comboBox1.ItemsSource = originalItemsSource;
另请注意,我假设您已将 设置ComboBox.ItemsSource
为名为 的集合(完整集合)originalItemsSource
,该集合保持完整且未更改。
如果您不想更改集合,您可以简单地调整可见性,所以给定这个 xaml
<ComboBox x:Name="itemsBox">
<ComboBox.Items>
<ComboBoxItem x:Name="itemRed" Content="Red"/>
<ComboBoxItem Content="White"/>
<ComboBoxItem x:Name="itemBlue" Content="Blue"/>
</ComboBox.Items>
</ComboBox>
<CheckBox x:Name="checkBox" Click="checkBox_Click"/>
您只需要,
private void checkBox_Click(object sender, RoutedEventArgs e)
{
itemBlue.Visibility = checkBox.IsChecked.Value ? Visibility.Collapsed : Visibility.Visible;
itemRed.Visibility = checkBox.IsChecked.Value ? Visibility.Collapsed : Visibility.Visible;
}
但是,从长远来看,Sheridan 的答案将更加灵活,因为过滤集合是一种更好的方法。如果您尝试做任何事情而不是公开/隐藏一组固定的项目(注意我上面的明确命名)你真的应该移动到ItemsSource
即如果你开始这样做,
private void checkBox_Click(object sender, RoutedEventArgs e)
{
foreach(var x in new ComboBoxItem[] { ItemBlue, ItemRed /*, etc*/ })
{
x.Visibility = checkBox.IsChecked.Value ? Visibility.Collapsed : Visibility.Visible;
}
}
然后将其重构为 ItemsSource