Я знаю, что в ASP.NET я могу получить элемент из DropDownList, используя
DropDownList1.Items.FindByText
Есть ли аналогичный метод, который я могу использовать в WPF для ComboBox?
Вот сценарий.
У меня есть таблица с именем RestrictionFormat, которая содержит столбец с именем RestrictionType, тип - это внешний ключ к таблице, в которой хранятся эти значения.
В моем приложении-редакторе, которое я пишу, когда пользователь выбирает RestrictionFormat из ComboBox (это отлично работает), я вытаскиваю детали для редактирования. Я использую второй ComboBox, чтобы убедиться, что пользователь выбирает только один RestrictionType при редактировании. У меня уже есть второе связанное свойство combobox из таблицы RestrictionType, но мне нужно изменить выбранный индекс на нем, чтобы он соответствовал значению, указанному в записи.
Вот сценарий.
У меня есть таблица с именем RestrictionFormat, которая содержит столбец с именем RestrictionType, тип - это внешний ключ к таблице, в которой хранятся эти значения.
В моем приложении-редакторе, которое я пишу, когда пользователь выбирает RestrictionFormat из ComboBox (это отлично работает), я вытаскиваю детали для редактирования. Я использую второй ComboBox, чтобы убедиться, что пользователь выбирает только один RestrictionType при редактировании. У меня уже есть второе связанное свойство combobox из таблицы RestrictionType, но мне нужно изменить выбранный индекс на нем, чтобы он соответствовал значению, указанному в записи.
Имеет ли это смысл?





В 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, который вы заполнили.
Можете ли вы использовать ItemContainerGenerator?
ItemContainerGenerator содержит метод ContainerFromItem, который принимает параметр объекта. Если у вас есть ссылка на полный объект, который содержит ваш comboBox (или способ его восстановления), вы можете использовать следующее:
ComboBoxItem item =
(ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);
Получить элементы поля со списком можно двумя способами:
По пунктам:
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.
ComboBox - это просто представление для ваших данных ... Я не думаю, что в таком случае заниматься разработкой на основе пользовательского интерфейса - хорошая идея. Вам следует выполнить поиск в источнике данных или коллекции элементов, а не в самом элементе управления пользовательского интерфейса. В противном случае вы можете застрять в привязке к конкретной реализации части пользовательского интерфейса, которую будет сложно поддерживать и поддерживать в будущем.