6

我知道在 ASP.NET 中,我可以通过使用从 DropDownList 获取项目

DropDownList1.Items.FindByText

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

这是场景。

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

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


这是场景。

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

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

这有意义吗?

4

5 回答 5

11

你可以使用 ItemContainerGenerator 吗?

ItemContainerGenerator 包含一个采用对象参数的 ContainerFromItem 方法。如果您有对组合框包含的完整对象的引用(或重建它的方法),则可以使用以下内容:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);
于 2009-03-19T16:28:33.633 回答
3

在 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 自动化

于 2008-09-03T08:11:31.870 回答
1

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

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

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

于 2008-09-19T04:08:38.400 回答
0

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

按项目:

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

按索引:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);
于 2009-03-19T16:30:01.727 回答
0

你能给出一些关于你到底想要做什么的背景吗?

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

Worst case, you can perform the search on the collection to which you bind your ComboBox using Linq To Objects.

Do not mistake the ComboBoxItem (that is, the element generated for you behind the scenes by WPF when you bind ItemsSource) with the SelectedItem, which is the actual object in the collection you bind to. That usually is the source of most problems whith WPF when you are not used to it. There are precious few cases when you need to find the actual ComboBoxItem.

于 2009-03-19T16:33:58.630 回答