我有两张桌子卡(cardID,cardName,setName)和Set(setID,setName,setMark)。我想将特定集中的卡名添加到ComboBox
项。
String setMark = comboBoxSetMark.SelectedItem.ToString();
comboBoxCardName.ItemsSource = (from cards in dataContext.Cards
join sets in dataContext.Sets
on cards.setID equals sets.setID
where sets.setMark == setMark
select new
{
cards.cardName
}).ToList();
我在comboBox
项目选择中得到类似内容:
{card name = Sylvan Caryatid}
如何获得cardName值?
答案 0 :(得分:2)
您正在Select
中选择新的匿名对象。并且WPF自动调用此对象的ToString()
方法以在视图中呈现项目。编译器 生成ToString()
的覆盖 ,显示 匿名对象中每个公共属性的值 < / strong>即可。
匿名对象的ToString()
结果为:
{Name1 = Value1,Name2 = Value2}
这种“意外”结果的原因是。您可以从查询中选择string
来解决此问题。
因此,请选择string
个对象:
comboBoxCardName.ItemsSource = (from cards in dataContext.Cards
join sets in dataContext.Sets
on cards.setID equals sets.setID
where sets.setMark == setMark
select cards.cardName
).ToList();
的 其他: 强>
更好的解决方案是为您的控件创建一个新模型,该模型必须显示名称,但选择所选项目的ID。
为此,您可以创建一个新类:
public class MyItem
{
public int Id;
public string Name;
}
然后从您的查询中获取List:
comboBoxCardName.ItemsSource = (from cards in dataContext.Cards
join sets in dataContext.Sets
on cards.setID equals sets.setID
where sets.setMark == setMark
select new { cardName = cards.cardName, cardId = cards.cardID }
).AsEnumerable()
.Select(x => new MyItem { Id = x.cardName, Name= x.cardId })
.ToList();
然后在DisplayMemberPath
中为您的控件设置SelectedValuePath
和.xaml
:
<ComboBox ...
DisplayMemberPath="Name"
SelectedValuePath="Id"/>