WPF ComboBox 项目在 Visibility.Collapsed 之后保留在列表中
WPF ComboBox items stays in the list after Visibility.Collapsed
我遇到了 wpf ComboBox 的问题。
我首先添加了一个文本框作为第一个项目,用于我的过滤建议
然后我通过 Foreach 循环在组合框中添加了大约 20 个复选框。
像这样
现在当我过滤掉它们时(我检查是否为真然后 Visibility.Collapsed)它们的踪迹仍然在 Combobox 中,就像这样
请记住,项目是一个一个地添加到组合框中的
像这样
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;
}
}
}
您应该查看 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;
}
}
我遇到了 wpf ComboBox 的问题。
我首先添加了一个文本框作为第一个项目,用于我的过滤建议
然后我通过 Foreach 循环在组合框中添加了大约 20 个复选框。
像这样
现在当我过滤掉它们时(我检查是否为真然后 Visibility.Collapsed)它们的踪迹仍然在 Combobox 中,就像这样
请记住,项目是一个一个地添加到组合框中的 像这样
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;
}
}
}
您应该查看 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;
}
}