Вопрос

Я знаю, что в ASP.NET Я могу получить элемент из выпадающего списка, используя

DropDownList1.Items.FindByText

Есть ли аналогичный метод, который я могу использовать в WPF для ComboBox?

Вот такой сценарий.

У меня есть таблица с именем RestrictionFormat, которая содержит столбец с именем RestrictionType, тип является внешним ключом к таблице, в которой хранятся эти значения.

В моем приложении-редакторе, которое я пишу, когда пользователь выбирает RestrictionFormat из выпадающего списка (это работает нормально), я извлекаю детали для редактирования.Я использую второй ComboBox, чтобы убедиться, что пользователь выбирает только один RestrictionType при редактировании.У меня уже есть второе свойство combobox bound из таблицы RestrictionType, но мне нужно изменить выбранный в нем индекс, чтобы он соответствовал значению, указанному в записи.


Вот такой сценарий.

У меня есть таблица с именем RestrictionFormat, которая содержит столбец с именем RestrictionType, тип является внешним ключом к таблице, в которой хранятся эти значения.

В моем приложении-редакторе, которое я пишу, когда пользователь выбирает RestrictionFormat из выпадающего списка (это работает нормально), я извлекаю детали для редактирования.Я использую второй ComboBox, чтобы убедиться, что пользователь выбирает только один RestrictionType при редактировании.У меня уже есть второе свойство combobox bound из таблицы RestrictionType, но мне нужно изменить выбранный в нем индекс, чтобы он соответствовал значению, указанному в записи.

Есть ли в этом смысл?

Это было полезно?

Решение

Можете ли вы использовать ItemContainerGenerator?

ItemContainerGenerator содержит метод ContainerFromItem, который принимает параметр объекта. Если у вас есть ссылка на полный объект, который содержит ваш comboBox (или способ его восстановления), вы можете использовать следующее:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

Другие советы

В WPF вы можете использовать метод FindName .

XAML:

    <ComboBox Name="combo">
        <ComboBoxItem Name="item1" >1</ComboBoxItem>
        <ComboBoxItem Name="item2">2</ComboBoxItem>
        <ComboBoxItem Name="item3">3</ComboBoxItem>
    </ComboBox>

Файл, лежащий в основе кода

   item1.Content = "New content"; // Reference combo box item by name
   ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method

Чтобы найти товар по его содержимому, вы можете использовать Автоматизация пользовательского интерфейса.

вместо того, чтобы пытаться связать SelectedIndex, почему бы вам просто не связать SelectedItem в ComboBox со значением в записи?

Другими словами, установите DataContext ComboBox (или его родительского элемента) на выбранную «запись» и привяжите SelectedItem на ComboBox к открытому свойству на «записи» ..

может помочь, если вы предоставите некоторые фрагменты кода или дополнительную информацию, чтобы ответы могли быть более конкретными и относиться к переменным и типам, которые вы используете как в исходной записи, так и в заполненном вами ComboBox.

Вы можете получить элементы комбинированного списка двумя способами:

По элементу:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);

По индексу:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

Не могли бы вы рассказать о том, что именно вы пытаетесь сделать?

Какие объекты вы кладете в свой Combobox и каким способом? (Вы устанавливаете или привязываете свойство ItemsSource?) Почему вам нужно искать элемент по его " тексту " ;? Наиболее распространенное использование в WPF - это привязка свойства SelectedItem к чему-либо еще, чтобы вы могли получить / установить выбранную запись, используя свое представление. Есть ли конкретное требование, для которого вам нужно найти определенный элемент в списке?

В худшем случае вы можете выполнить поиск по коллекции, к которой привязываете ComboBox, используя Linq To Objects.

Не путайте ComboBoxItem (то есть элемент, сгенерированный для вас за кулисами WPF при связывании ItemsSource) с SelectedItem, который является фактическим объектом в коллекции, к которой вы привязываете. Это обычно является источником большинства проблем с WPF, когда вы к этому не привыкли. Есть несколько случаев, когда вам нужно найти фактический ComboBoxItem.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top