在c#中编程后,我发现当我们在comboBox中有相同的项时,我们无法获得正确的selectedIndex。 想象一下,我们有ComboBox这个项目:
我想在ComboBox中选择第三项时收到2,但我总是收到0。 我想在ComboBox中选择第五项时收到4,但我总是收到3。
我认为SelectedIndex
中的ComboBox
总是返回ComboBox的第一个元素。
如何从具有相同项目的comboBox中获取所选项目索引?
答案 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属性DisplayMember
和DataMember
初始化为该属性。
现在将comboBox的DataSource
属性分配给自定义项列表。
由于DataSource的元素现在不相等(通过引用),它们将被视为不相等,您将能够获得SelectedValue
。 SelectedIndex
可能也会起作用,但在这种情况下,这不是最好的方法。
答案 3 :(得分:0)
我不会理解使用具有不同值的相同文字,而是使用SelectedValue
而不是SelectedIndex
。
如果你绝对需要索引,你可以循环组合框项......