2014-01-31 4 views
0

Я определил Item Item источника Combobox в объекте List. Я хочу достичь ComboBoxItem с помощью метода FindName(), но он всегда возвращает null. Я попробовал ApplyTemplate() в начале, и я также попытался добраться до элемента с помощью Combobox.Template. Вот мой код. Какие-либо предложения?Почему метод Combobox.FindName() всегда возвращает значение null?

List<string> subjectsList = e.Result; 
cbCategory.ItemsSource = subjectsList; 
cbCategory.SelectedItem = cbCategory.FindName("DefaultChatSubject");  

Кстати, у меня нет никаких проблем с Элементами в ItemSource.

ответ

1

FrameworkTemplate.FindName MethodНаходит элемент, который имеет имя идентификатора. На связанной странице в MSDN:

Если элемент имеет дочерние элементы, эти дочерние элементы рекурсивно ищут запрошенный именованный элемент.

FindName работает в области имен текущего элемента. Для получения дополнительной информации см. WPF XAML Namescopes.

Для того, чтобы успешно использовать метод FindName, дочерний элемент, который вы ищете сусла имеет свой набор Name собственности. Поскольку несколько маловероятно, что связанный с данными набор элементов будет иметь набор свойств ComboBoxItem.Name, также маловероятно, что это сработает для вас.

Лучший способ установить выбранный элемент, как это:

cbCategory.SelectedItem = subjectsList.First(i => i.Property == "DefaultChatSubject"); 

Или, если ваши элементы коллекции являются только string с, как это:

cbCategory.SelectedItem = "DefaultChatSubject"; 
1

FindName предназначен для поиска именованного дочернего элемента элемента FrameworkElement. Он не находит строку элемента в коллекции Items ItemsControl (например, ComboBox).

Вы могли бы просто назвать это вместо того, чтобы:

cbCategory.SelectedItem = "DefaultChatSubject"; 
Смежные вопросы