C# 在某些情况下,组合框中的selectedIndex不会返回正确的整数
在用c进行了一段时间的编程之后,我发现当comboBox中有相等的项时,我们无法得到正确的selectedIndex。 假设我们有包含以下项目的组合框: 当我在组合框中选择第三项时,我希望收到2,但我总是收到0。 当我在组合框中选择第五项时,我想收到4,但我总是收到3 我认为ComboBox中的SelectedIndex总是返回ComboBox的第一个元素C# 在某些情况下,组合框中的selectedIndex不会返回正确的整数,c#,.net,wpf,C#,.net,Wpf,在用c进行了一段时间的编程之后,我发现当comboBox中有相等的项时,我们无法得到正确的selectedIndex。 假设我们有包含以下项目的组合框: 当我在组合框中选择第三项时,我希望收到2,但我总是收到0。 当我在组合框中选择第五项时,我想收到4,但我总是收到3 我认为ComboBox中的SelectedIndex总是返回ComboBox的第一个元素 如何从具有相同项的组合框中获取选定项索引?您可以创建一个包含名称和Id属性的复选框模型类。 然后将组合框的属性DisplayMember和D
如何从具有相同项的组合框中获取选定项索引?您可以创建一个包含名称和Id属性的复选框模型类。 然后将组合框的属性DisplayMember和DataMember初始化为该属性。 现在,将comboBox的DataSource属性指定给自定义项列表
由于数据源的元素现在在引用方面并不相等,因此它们不会被视为相等,您将能够获得SelectedValue。SelectedIndex可能也会起作用,但在这种情况下,这不是最好的方法。我不理解相同文本具有不同值的含义,无论如何,使用SelectedValue而不是SelectedIndex
如果您确实需要索引,可以循环组合框项…我怀疑您正在绑定列表字符串。 String是引用类型,但它重写了=并找到第一个匹配的值。 创建一个只有单个字符串属性的简单类
public class SimpleString
{
public string StrValue { get; set; }
public SimpleString() { }
public SimpleString(string strValue) { StrValue = StrValue; }
}
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
private List<String> list = new List<string>();
public List<String> List { get { return this.list; } set { this.list = value; } }
public MainWindow()
{
InitializeComponent();
list.Add("methode");
list.Add("methode");
list.Add("methode");
list.Add("methode2");
list.Add("methode2");
this.DataContext = this;
}
private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
MessageBox.Show(comboBox1.SelectedIndex.ToString());
}
}
MainWindow.xaml:
<Window x:Class="Temp2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ComboBox Height="23" HorizontalAlignment="Left" Name="comboBox1"
VerticalAlignment="Top" Width="120"
SelectionChanged="comboBox1_SelectionChanged"
ItemsSource="{Binding List}" />
</Grid>
</Window>
对我来说很好。你能详细说明你的问题吗?请注意,到目前为止,我尝试了所有不同的类型,并始终得到了有效的结果。我不觉得ComboBox中有相同的文本。如何选择项目?显示一些代码。我怀疑您正在绑定到列表。String是引用类型,但它重写了=并找到第一个匹配的值。创建一个只有单个字符串属性的简单类。我完全同意@Blam,这是字符串类在Equals方法中返回true的问题。我根本无法重现您的问题。即使是在将ItemsSource绑定到Blam和HighCore建议的列表时也是如此。我的例子很好用。你能详细说明一下吗?可能有代码示例吗?我需要组合框中该项的索引。@Ahadaghapour正如我在回答中所说的那样,只需循环遍历下拉项并将该值与所选值进行比较。我没有从列表绑定,但我使用foreach。。。要将所有列表添加到comboBox.ItemsAdd或bind,它是字符串,并找到第一个匹配的值。亲爱的,我使用foreach在lis的组合框项目中添加项目,我没有正确选择索引,但现在我使用另一种方法,即在项目列表中没有相同的项目。