2008-09-03 111 views
5

项目我知道在ASP.NET我可以用查找WPF组合框

DropDownList1.Items.FindByText 

是否有类似的方法,我可以在WPF中使用一个ComboBox得到一个DropDownList的项目?

这里是场景。

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

在我编写的编辑器应用程序中,当用户从ComboBox中选择RestrictionFormat(此工作正常)时,我拉起了编辑的细节。我正在使用第二个ComboBox来确保用户在编辑时只选择一个RestrictionType。我已经有RestrictionType表中的第二个组合框属性,但我需要更改其上的选定索引以匹配记录中指定的值。


这里是场景。

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

在我编写的编辑器应用程序中,当用户从ComboBox中选择RestrictionFormat(此工作正常)时,我拉起了编辑的细节。我正在使用第二个ComboBox来确保用户在编辑时只选择一个RestrictionType。我已经有RestrictionType表中的第二个组合框属性,但我需要更改其上的选定索引以匹配记录中指定的值。

这是否有意义?

+0

ComboBox只是一个查看你的数据......我不认为这样做是一个好主意,在这种情况下做UI驱动的开发。您应该针对数据源或项目集合执行搜索,而不是UI控制本身。否则,您可能会被限制为未来难以维护和支持的UI部件的特定实现。 – 2009-03-21 13:27:55

回答

9

你可以使用ItemContainerGenerator吗?

ItemContainerGenerator包含一个接受对象参数的ContainerFromItem方法。如果你有你的组合框包含完整对象的引用(或方式来重建它),你可以使用以下命令:

通过项目:

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

呵呵你打我吧:) – Arcturus 2009-03-19 16:30:26

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

1

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

换句话说,设置ComboBox的DataContext的(或它的父)到所选择的“记录”和ComboBox中的SelectedItem结合于“记录”的暴露属性..

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

0

您可以通过两种方式获取组合框项目:

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

通过指数:

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

你能不能给一些背景,究竟你是什么TR要做什么?

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

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

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