2017-06-20 22 views
2

我遇到了wpf组合框的问题。 我第一次添加了一个Textbox作为第一个项目用于我的过滤建议 然后,我通过一个Foreach循环在Combobox中添加了大约20个Checkboxes。 这样 enter image description hereWPF ComboBox项目在Visibility.Collapsed后停留在列表中

现在

时筛选出来(我是否真的那么Visibility.Collapsed)它们的踪影依然在ComboBox这样enter image description here

记住,项目一个接一个加入组合框 这样

DataTable machinesTable = machineModel.GetAllMachines().Tables[0]; 

List<CheckBox> list = new List<CheckBox>(); 

foreach (DataRow item in machinesTable.Rows) 
{ 
    string ID = item["ID"].ToString(); 
    string manufacture = item["MANUFACTURER"].ToString(); 
    string model = item["MODEL"].ToString(); 
    MachinesComboBox.Items.Add(new CheckBox() { Uid = ID, Content = manufacture + " - " + model }); 
} 

和过滤系统的工作原理是这样

foreach (object item in MachinesComboBox.Items) 
{ 
    if (item is CheckBox) 
    { 
     if (((CheckBox)item).Content.ToString().Contains(MachinFilterTextbox.Text) || MachinFilterTextbox.Text=="") 
     { 
      ((CheckBox)item).Visibility = Visibility.Visible; 
     } 
     else 
     { 
      ((CheckBox)item).Visibility = Visibility.Collapsed; 
     } 
    } 
} 

回答

2

你应该看看MVVM design pattern但作为一个速战速决,你可以设置父ComboBoxItem容器Visibility

foreach (CheckBox item in MachinesComboBox.Items.OfType<CheckBox>()) 
{ 
    ComboBoxItem container = MachinesComboBox.ItemContainerGenerator.ContainerFromItem(item) as ComboBoxItem; 
    if (item.Content.ToString().Contains(MachinFilterTextbox.Text) || MachinFilterTextbox.Text == "") 
    { 
     container.Visibility = Visibility.Visible; 
    } 
    else 
    { 
     container.Visibility = Visibility.Collapsed; 
    } 
} 
+0

感谢的人它的伟大工程 –