Combobox只显示一些comboxitems

时间:2013-08-27 09:25:25

标签: c# wpf combobox

我设置了ComboBox,其中约有ComboBox itemsif (checkbox1.ischecked) { combobox1.items = item 1, item 2 // correct code here } 。我希望能够限制用户点击复选框时可以看到的数字,例如

{{1}}

一直在搜索网络和MSDN等,我甚至不确定是否可能在正确的方向上任何指针都会受到赞赏

2 个答案:

答案 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

相关问题