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

C# 如何以编程方式禁用满足条件的组合框项,c#,wpf,C#,Wpf,在组合框中,有些项目必须启用,有些项目必须禁用(并且可见) 首先设置组合框项资源: comboBoxMachine.ItemsSource = machineList; 其中comboBoxMachine是一个组合框,machineList是一个列表(机器是一个自定义对象) 随后,必须检查列表中每台机器的条件,如果满足条件,则必须禁用组合框中的相应项 下面是逻辑的代码/伪代码的组合: private void modifyMachineComboBoxItems() {

在组合框中,有些项目必须启用,有些项目必须禁用(并且可见)

首先设置组合框项资源:

comboBoxMachine.ItemsSource = machineList;
其中comboBoxMachine是一个
组合框
,machineList是一个
列表
机器
是一个自定义对象)

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

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

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

您的机器上应该只有布尔属性,该属性对应于该项是否被禁用在您的
组合框中启用。ItemContainerStyle
您可以将
IsEnabled
绑定到该属性,然后当您要禁用该项目时,只需将计算机上的属性设置为false


或者,您可以使用(您确实不应该使用):


(顺便说一句,您不需要先获得职位,因为还有一种方法,也可以参见)

这里似乎已经回答了类似的问题:您不能从列表中删除该项目吗?或者您需要扩展ComboBoxItem并允许将其设置为禁用状态。确实要这样做吗?因为我不确定这样做是否是一个好的UI设计。在生成器完成容器生成之前,警告访问
ItemContainerGenerator.ContainerFromIndex()
(或.ContainerFromItem())也是明智的做法。如果您试图在完成之前访问它们,您将收到一个异常。有关更多信息,请参阅属性/事件。
var item = comboBoxMachine.ItemContainerGenerator.ContainerFromIndex(currentPosition) as ComboBoxItem;
item.IsEnabled = false;