2014-01-31 254 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"; 
相关问题