ComboBox.Items.IndexOf returns -1

ComboBox.Items.IndexOf returns -1

我有一个 ComboBox,它是在页面加载事件中填充的。在填充 ComboBox 之后,我调用了另一个方法 returns 一个值,我想在 Page loads 时将其作为 ComboBox 的默认值。如何将 selectedIndex 更改为调用其他方法时返回的值?

XAML 对于 ComboBox

<ComboBox Name="cboProductType" DisplayMemberPath="ProductTypeName" SelectedValuePath="ProductTypeID" SelectedIndex="0"/> 

页面加载事件:

void OnProductDetailLoad(object sender, RoutedEventArgs e)
{
   GetServiceReference.Service1Client service = new GetServiceReference.Service1Client();
   service.GetProductDetailsCompleted += service_GetProductDetailsCompleted;
   service.GetProductTypeCompleted += service_GetProductTypeCompleted;
   service.GetProductTypeAsync();
   service.GetProductDetailsAsync(ProductId);
}

页面加载时填充 ComboBox:

void service_GetProductTypeCompleted(object sender, GetProductTypeCompletedEventArgs e)
{
    cboProductType.ItemsSource = e.Result;
}

调用另一个 returns 特定 ProductTypeName 的方法。我试图获取那个特定 ProductTypeName 的索引,但总是 returns -1

void service_GetProductDetailsCompleted(object sender, GetServiceReference.GetProductDetailsCompletedEventArgs e)
{
   if (e.Result.Count != 0)
   {
      p.ProductID = e.Result[0].ProductID;
     int index = cboProductType.Items.IndexOf(e.Result[0].ProductTypeName);
    cboProductType.SelectedIndex = index;
}

这也是设置 SelectedIndex 属性 的正确方法吗? 假设我按照以下索引顺序在 ComboBox 中加载了以下项目:

Index    DisplayMemberName(ProductTypeName)

   0           Color
   1           Size
   2           Variant
   3           N-size

e.Result[0].ProductTypeName 包含 Variant 所以我现在想要 ComboBoxSelectedIndex = 2

我希望我的问题很清楚

SelectedIndex仅在手动填充组合框时有效。如果您使用 ItemsSource 来填充组合框中的项目,您必须定义一个 SelectedValuePath ,这样您就可以使用 SelectedItem 属性 到 SET/GET 所选项目。当使用绑定到 DataContext 来绑定控件时,SelectedValuePath 应该是将 Parent/Child 链接在一起的 属性。