2014-01-31 250 views
0

我已經在List對象中定義了Combobox的ItemSource。我想通過使用FindName()方法到達ComboBoxItem,但它總是返回null。我在開始時嘗試了ApplyTemplate(),我也嘗試使用Combobox.Template訪問該Item。這是我的代碼。有什麼建議麼?爲什麼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 S,這樣的:

cbCategory.SelectedItem = "DefaultChatSubject"; 
1

FindName是爲了找到FrameworkElement的命名子元素。它沒有在ItemsControl的Items集合中找到一個項目字符串(比如你的ComboBox)。

你可以簡單地代替稱之爲:

cbCategory.SelectedItem = "DefaultChatSubject"; 
相關問題