Как программно отключить элементы ComboBox, которые удовлетворяют условию - PullRequest
3 голосов
/ 17 июля 2011

В ComboBox есть некоторые элементы, которые должны быть включены, и некоторые, которые должны быть отключены (и видимы).

Сначала задается источник элементов ComboBox:

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 Ответ

4 голосов
/ 17 июля 2011

У вас должно быть просто логическое свойство на вашем компьютере, соответствующее тому, включен ли элемент, в вашем ComboBox.ItemContainerStyle вы можете привязать IsEnabled к этому свойству, затем, когда вы хотите отключить элемент, просто установите свойство наmachine to false.


В качестве альтернативы вы можете использовать ItemContainerGenerator (что вам действительно не следует):

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

(вы делаетеМежду прочим, не нужно сначала получать позицию, так как есть метод ContainerFromItem, см. также комментарий ниже )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...