如何以编程方式禁用满足条件的组合框项
本文关键字:条件 组合 满足 编程 方式禁 | 更新日期: 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
方法,也请参阅下面的评论)