Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在某些情况下,组合框中的selectedIndex不会返回正确的整数_C#_.net_Wpf - Fatal编程技术网

C# 在某些情况下,组合框中的selectedIndex不会返回正确的整数

C# 在某些情况下,组合框中的selectedIndex不会返回正确的整数,c#,.net,wpf,C#,.net,Wpf,在用c进行了一段时间的编程之后,我发现当comboBox中有相等的项时,我们无法得到正确的selectedIndex。 假设我们有包含以下项目的组合框: 当我在组合框中选择第三项时,我希望收到2,但我总是收到0。 当我在组合框中选择第五项时,我想收到4,但我总是收到3 我认为ComboBox中的SelectedIndex总是返回ComboBox的第一个元素 如何从具有相同项的组合框中获取选定项索引?您可以创建一个包含名称和Id属性的复选框模型类。 然后将组合框的属性DisplayMember和D

在用c进行了一段时间的编程之后,我发现当comboBox中有相等的项时,我们无法得到正确的selectedIndex。 假设我们有包含以下项目的组合框:

当我在组合框中选择第三项时,我希望收到2,但我总是收到0。 当我在组合框中选择第五项时,我想收到4,但我总是收到3

我认为ComboBox中的SelectedIndex总是返回ComboBox的第一个元素


如何从具有相同项的组合框中获取选定项索引?

您可以创建一个包含名称和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的组合框项目中添加项目,我没有正确选择索引,但现在我使用另一种方法,即在项目列表中没有相同的项目。