【问题标题】:WPF ComboBox items stays in the list after Visibility.CollapsedWPF ComboBox 项目在 Visibility.Collapsed 之后保留在列表中
【发布时间】:2017-11-22 22:18:23
【问题描述】:

我遇到了 wpf ComboBox 的问题。 我首先添加了一个文本框作为第一个用于我的过滤建议的项目 然后我通过 Foreach 循环在 Combobox 中添加了大约 20 个复选框。 像这样

现在,当我将它们过滤掉时(我检查是否为真,然后是 Visibility.Collapsed),它们的踪迹仍在组合框中,就像这样

记住项目是一一添加到组合框中的 像这样

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

【问题讨论】:

    标签: c# wpf combobox filtering visibility


    【解决方案1】:

    您应该查看MVVM design pattern,但作为快速修复,您可以设置父容器ComboBoxItemVisibility

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

    【讨论】:

    • 知道这是一种坏死。但是我在使用的遗留应用程序中遇到了同样的问题,但是这里建议的方法由于某种原因对我们不起作用,因为 ComboBoxItem container = MachinesComboBox.ItemContainerGenerator.ContainerFromItem(item) as ComboBoxItem;总是变为空。是否有另一种方法可以轻松访问容器,或者这是一个更大的问题,应该更高层解决?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多