Найти элемент в WPF ComboBox - PullRequest
       37

Найти элемент в WPF ComboBox

6 голосов
/ 03 сентября 2008

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

DropDownList1.Items.FindByText

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

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

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

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


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

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

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

Имеет ли это смысл?

Ответы [ 5 ]

9 голосов
/ 19 марта 2009

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

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

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);
2 голосов
/ 03 сентября 2008

В 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

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

1 голос
/ 19 сентября 2008

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

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

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

0 голосов
/ 19 марта 2009

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

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

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

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

0 голосов
/ 19 марта 2009

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

По позиции:

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

По индексу:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...