2013-08-27 89 views
1

我建立了一個ComboBox約20 ComboBox items在它。我希望能夠限制用戶可以看到的數字,當他們點擊一個複選框,例如Combobox只顯示一些comboxitems

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

一直在尋找網頁和MSDN等,我甚至不知道它可能在正確的方向上沒有任何指針將理解

+0

你從哪裏獲得組合框的項目? – Andrew

+0

你是什麼意思限制他們可以看到的數量?你的意思是使可視區域在組合框下拉框中變小?你的意思是隻添加項目到組合框中的用戶設置的限制複選框?你可以給我們更多關於你的要求的信息嗎? –

+0

抱歉沒有解釋得很好。 – CM99

回答

3

基本上,你將必須決定哪些項目將被添加到適合你,但在這個例子中,我只是挑選前5項:

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

還請注意,我假設您已將ComboBox.ItemsSource設置爲集合(f全部收集)名爲originalItemsSource,其中仍然是完整無損。

+1

基於他在這個問題下的評論,我認爲他是在Xaml中手動添加每個項目。 –

+0

謝謝@Kazuo,我沒有注意到......都一樣,他仍然可以將對他的XAML聲明項的引用存儲在'originalItemsSource 'Loaded'事件(或類似)中的參數,然後按原樣使用此代碼示例。 – Sheridan

+1

我同意這裏的方法是根據您的答案過濾組合框源。根據您的假設,在OP不理解您的解決方案的情況下留下評論。 –

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; 
} 

不過謝里丹的回答遠從長遠來看,過濾更加靈活是一種更好的方法。如果你正在嘗試做的除揭露什麼/隱藏固定的一組項目(注意我的上面明確命名的),你真的應該移動到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

+1

謝謝阿爾斯基,你的方式也起作用,謝里登先生給了謝里登,謝謝你的幫助。 – CM99

+0

不,不,給Sheridan打勾,因爲他的解決方案是一個更好的方法,不是因爲他是第一個;-) – AlSki