在WPF ComboBox中查找项目

时间:2008-09-03 08:06:08

标签: .net wpf search user-controls

我知道在ASP.NET中我可以使用

从DropDownList中获取一个项目
DropDownList1.Items.FindByText

我可以在WPF中为ComboBox使用类似的方法吗?

这是情景。

我有一个名为RestrictionFormat的表,其中包含一个名为RestrictionType的列,该类型是存储这些值的表的外键。

在我正在编写的编辑器应用程序中,当用户从ComboBox中选择RestrictionFormat时(这很好),我正在提取详细信息进行编辑。我正在使用第二个ComboBox来确保用户在编辑时只选择一个RestrictionType。我已经从RestrictionType表中获得了第二个组合框绑定属性,但是我需要更改它上面的选定索引以匹配记录中指定的值。


这是情景。

我有一个名为RestrictionFormat的表,其中包含一个名为RestrictionType的列,该类型是存储这些值的表的外键。

在我正在编写的编辑器应用程序中,当用户从ComboBox中选择RestrictionFormat时(这很好),我正在提取详细信息进行编辑。我正在使用第二个ComboBox来确保用户在编辑时只选择一个RestrictionType。我已经从RestrictionType表中获得了第二个组合框绑定属性,但是我需要更改它上面的选定索引以匹配记录中指定的值。

这有意义吗?

5 个答案:

答案 0 :(得分:9)

你能使用ItemContainerGenerator吗?

ItemContainerGenerator包含一个获取对象参数的ContainerFromItem方法。如果您有对comboBox包含的完整对象的引用(或重构方法),则可以使用以下命令:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

答案 1 :(得分:2)

在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

要按内容查找项目,您可以使用UI automation

答案 2 :(得分:1)

而不是尝试绑定SelectedIndex,为什么不将ComboBox中的SelectedItem绑定到记录中的值?

换句话说,将ComboBox(或其父级)的DataContext设置为选定的“记录”,并将ComboBox上的SelectedItem绑定到“记录”上的公开属性。

如果您可以提供一些代码片段或额外的详细信息以便响应可以更具体,并且可以参考您在源记录和已填充的ComboBox中使用的变量和类型,这可能会有所帮助。

答案 3 :(得分:0)

您可以通过两种方式检索组合框项目:

按项目:

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

按索引:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

答案 4 :(得分:0)

你能提供一些关于你究竟想做什么的背景吗?

您在Combobox中放置了哪些对象,并使用哪种方法? (您是在设置还是绑定ItemsSource属性?) 为什么需要通过“文本”查找项目? WPF中最常用的用法是将SelectedItem属性绑定到其他属性,以便您可以使用表示形式检索/设置所选条目。您是否需要在列表中找到特定项目?

最坏的情况是,您可以使用Linq To Objects对要将ComboBox绑定到的集合执行搜索。

不要将ComboBoxItem(即绑定ItemsSource时由WPF在幕后为您生成的元素)与SelectedItem错误地绑定,SelectedItem是您绑定到的集合中的实际对象。当你不习惯WPF时,这通常是大多数问题的根源。当您需要找到实际的ComboBoxItem时,极少数情况。