在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项被禁用,我将非常感谢
答案 0 :(得分:4)
你的机器上应该只有boolean属性,对应于项是否已启用,ComboBox.ItemContainerStyle
中你可以将IsEnabled
绑定到该属性,然后当你想要禁用刚刚设置的项时机器上的属性为假。
或者你可以使用ItemContainerGenerator
(你真的不应该这样):
var item = comboBoxMachine.ItemContainerGenerator.ContainerFromIndex(currentPosition) as ComboBoxItem;
item.IsEnabled = false;
(由于还有ContainerFromItem
方法,您不需要先获取位置,另请参阅comment below)