如何以编程方式禁用满足条件的组合框项

本文关键字:条件 组合 满足 编程 方式禁 | 更新日期: 2023-09-27 18:02:24

在ComboBox中,有些项目必须启用,有些项目必须禁用(并且可见)。

首先将ComboBox ItemsSource设置为:

comboBoxMachine.ItemsSource = machineList;

其中comboBoxMachine是ComboBox, machineList是List<Machine> (Machine是自定义对象)

之后必须检查列表中每台机器的条件,如果满足,则必须禁用组合框中的相应项。

下面是逻辑代码/伪代码的组合:

private void modifyMachineComboBoxItems()
    {
        foreach (Machine mch in machineList)
        {
            if (constructionSiteSchedule.ReservationMachinePeriods.Count(x => x.MachineId == mch.Id) > 0) //if this condition is fulfilled, it should be not possible to select the machine from the comboBoxMachine
            {
                int currentPosition = machineList.IndexOf(mch);
                disable the element from the comboBoxMachine at position currentPosition;
            }
        }
    }

到目前为止,我还没有弄清楚的是如何在给定位置禁用ComboBox中的元素,所以如果有人可以修改上面的代码,使满足条件的机器的ComboBox项被禁用,我将非常感谢。

如何以编程方式禁用满足条件的组合框项

你应该在你的机器上有布尔属性,对应于项目是否启用,在你的ComboBox.ItemContainerStyle中,你可以将IsEnabled绑定到该属性,然后当你想禁用该项目时,只需将机器上的属性设置为false。


或者你可以使用ItemContainerGenerator(你真的不应该):

var item = comboBoxMachine.ItemContainerGenerator.ContainerFromIndex(currentPosition) as ComboBoxItem;
item.IsEnabled = false;

(顺便说一下,您不需要首先获得位置,因为还有ContainerFromItem方法,也请参阅下面的评论)