C# 访问所选列表框项目的其他属性

C# 访问所选列表框项目的其他属性,c#,wpf,C#,Wpf,我一直在寻找这个问题的答案。我想我差一点就找到了这个帖子: 但我在代码的这一部分不断得到一个“无效强制转换异常”错误: string m = ((Customer)LBox.SelectedItem).ID; 以下是我迄今为止的大部分代码,其中我从一个数据类(linq到SQL)添加了listbox项。我陷入困境的地方是,我想获取我在列表框中选择的记录的DB_ID 我有一个变通方法,可以使用客户的名称LBox.SelectedItem值对数据库执行另一个SQL查询,但我想我一定是做错了什么,无

我一直在寻找这个问题的答案。我想我差一点就找到了这个帖子:

但我在代码的这一部分不断得到一个“无效强制转换异常”错误:

string m = ((Customer)LBox.SelectedItem).ID;
以下是我迄今为止的大部分代码,其中我从一个数据类(linq到SQL)添加了listbox项。我陷入困境的地方是,我想获取我在列表框中选择的记录的DB_ID

我有一个变通方法,可以使用客户的名称LBox.SelectedItem值对数据库执行另一个SQL查询,但我想我一定是做错了什么,无法将SelectedItem值转换回客户以获取ID

我刚开始在C#工作,几乎什么都不知道,所以任何帮助都将不胜感激

DataClasses1DataContext dc = new DataClasses1DataContext(Properties.Settings.Default.DBConnectionString);

public MainWindow()
{
    InitializeComponent();
    var q = from accts in dc.Customers where accts.SysStatus == "Active" orderby accts.Customer select accts;

    if (dc.DatabaseExists())
        foreach (Customer c in q)
            LBox.Items.Add(c.Customer);
}

public void LBox_SelectionChanged (object sender, SelectionChangedEventArgs e)
{
    lblComp.Content = LBox.SelectedItem;
    string m = ((Customer)LBox.SelectedItem).ID;
}
我想@Boxed帮我一把

我修改代码如下:

foreach (Surgeon c in q)
   LBox.Items.Add(c);
   LBox.DisplayMemberPath = "Customer";
然后我能够从Customers类中获得如下值:

string m = ((Customers)LBox.SelectedItem).ID;
lblComp.Content = ((Customers)LBox.SelectedItem).Customer;
txtDetails.Text = m;

这段代码是理想的,还是我应该做其他事情?

我建议您采取另一个步骤,只是为了帮助调试:声明a
var-selectedItem=LBox.selectedItem
字符串m
之前,在其上放置一个断点并检查其值。
c.Customer
的数据类型是什么?如果是字符串,则不能通过执行
((Customer)LBox.SelectedItem)
将其强制转换为客户。最好是通过
LBox.DataSource=q.ToList()将ListBox的DataSource属性设置为
q.ToList()
并将列表框的ValueMember属性设置为
“ID”
,将DisplayMember属性设置为
“Customer”
<代码>LBox.ValueMember=“ID”和
LBox.DisplayMember=“Customer;”
奇怪的上下文。您在
Customer
中有一个
Customer
类,它是一个集合?我想您只需要
LBox.Items.Add(c)
我找到了纠正我问题的代码。我认为@Boxed有助于理解我做错了什么,但我想知道我是否正确编码,以及为什么某些属性或属性不适用于我的上下文。