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 链接在一起的 属性。
我有一个 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 链接在一起的 属性。