我在List对象中定义了Combobox的ItemSource。我想通过使用FindName()方法到达ComboBoxItem但它总是返回null。我在开始时尝试过ApplyTemplate(),并且我也尝试使用Combobox.Template来访问Item。这是我的代码。有什么建议?
List<string> subjectsList = e.Result;
cbCategory.ItemsSource = subjectsList;
cbCategory.SelectedItem = cbCategory.FindName("DefaultChatSubject");
顺便说一句,我对ItemSource中的Items没有任何问题。
答案 0 :(得分:2)
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 :(得分:1)
FindName
用于查找FrameworkElement的命名子元素。它没有在ItemsControl的Items集合中找到项目字符串(就像你的ComboBox一样)。
您可以简单地调用它:
cbCategory.SelectedItem = "DefaultChatSubject";