如何以编程方式禁用满足条件的ComboBox项

时间:2011-07-17 12:13:51

标签: c# wpf

在ComboBox中,有一些项目必须启用,一些项目必须被禁用(和可见)。

首先设置ComboBox ItemsSource:

comboBoxMachine.ItemsSource = machineList;

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

稍后必须检查列表中每台机器的条件,如果满足,则必须禁用ComboBox中的相应项目。

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

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项被禁用,我将非常感谢

1 个答案:

答案 0 :(得分:4)

你的机器上应该只有boolean属性,对应于项是否已启用,ComboBox.ItemContainerStyle中你可以将IsEnabled绑定到该属性,然后当你想要禁用刚刚设置的项时机器上的属性为假。


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

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

(由于还有ContainerFromItem方法,您不需要先获取位置,另请参阅comment below