在某些情况下,comboBox中的selectedIndex不会返回正确的整数

时间:2013-03-11 16:10:23

标签: c# .net wpf

在c#中编程后,我发现当我们在comboBox中有相同的项时,我们无法获得正确的selectedIndex。 想象一下,我们有ComboBox这个项目:

enter image description here

我想在ComboBox中选择第三项时收到2,但我总是收到0。 我想在ComboBox中选择第五项时收到4,但我总是收到3。

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

如何从具有相同项目的comboBox中获取所选项目索引?

4 个答案:

答案 0 :(得分:2)

我怀疑你绑定了List String String是引用类型,但它会覆盖=并且它会找到第一个值匹配 创建一个只有一个字符串属性的简单类。

public class SimpleString
{
    public string StrValue { get; set; }
    public SimpleString() { }
    public SimpleString(string strValue) { StrValue = StrValue;  }
}

答案 1 :(得分:1)

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>

对我来说很好。你能详细说明一下你的问题吗?请注意,我尝试了所有不同类型的类型,并且到目前为止总能得到一个有效的结果。

答案 2 :(得分:0)

您可以创建一个包含Name和Id属性的复选框模型类。 然后将comboBox'es属性DisplayMemberDataMember初始化为该属性。 现在将comboBox的DataSource属性分配给自定义项列表。

由于DataSource的元素现在不相等(通过引用),它们将被视为不相等,您将能够获得SelectedValueSelectedIndex可能也会起作用,但在这种情况下,这不是最好的方法。

答案 3 :(得分:0)

我不会理解使用具有不同值的相同文字,而是使用SelectedValue而不是SelectedIndex

如果你绝对需要索引,你可以循环组合框项......