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

DropDownList1.Items.FindByText

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

这是场景。

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

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


这是场景。

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

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

这有道理吗?

有帮助吗?

解决方案

你可以使用 ItemContainerGenerator 吗?

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

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

其他提示

在 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

要按内容查找项目,您可以使用 用户界面自动化.

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

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

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

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

按项目:

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

按索引:

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

您能否提供一些背景信息来说明您到底想做什么?

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top