1

我已经建立了一个ComboBox大约有 20 个ComboBox items的。我希望能够限制用户单击复选框时可以看到的数量,例如

if (checkbox1.ischecked)    
{
    combobox1.items = item 1, item 2 // correct code here    
}

一直在搜索网络和 MSDN 等,我什至不确定是否有可能在正确的方向上提供任何指针

4

2 回答 2

4

基本上,您必须决定添加哪些项目以适合您,但在此示例中,我只选择前 5 个项目:

if (checkBox1.IsChecked)
{
    ObservableCollection<YourItemType> filteredCollection = originalItemsSource.Take(5);
    comboBox1.ItemsSource = filteredCollection;
}
else comboBox1.ItemsSource = originalItemsSource;

另请注意,我假设您已将 设置ComboBox.ItemsSource为名为 的集合(完整集合)originalItemsSource,该集合保持完整且未更改。

于 2013-08-27T10:13:16.940 回答
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

于 2013-08-27T10:20:45.970 回答