我设置了ComboBox
,其中约有ComboBox items
个if (checkbox1.ischecked)
{
combobox1.items = item 1, item 2 // correct code here
}
。我希望能够限制用户点击复选框时可以看到的数字,例如
{{1}}
一直在搜索网络和MSDN等,我甚至不确定是否可能在正确的方向上任何指针都会受到赞赏
答案 0 :(得分:4)
基本上,您必须决定添加哪些项目以适合您,但在此示例中,我只是选择前5项:
if (checkBox1.IsChecked)
{
ObservableCollection<YourItemType> filteredCollection = originalItemsSource.Take(5);
comboBox1.ItemsSource = filteredCollection;
}
else comboBox1.ItemsSource = originalItemsSource;
另请注意,我假设您已将ComboBox.ItemsSource
设置为名为originalItemsSource
的集合(完整集合),保持完整且未经更改。
答案 1 :(得分:1)
如果您不想更改集合,可以简单地调整可见性,因此给定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