2011-06-28 54 views
2

我有一个包含人物联系人记录的Contants表的SQL数据库。 Im将联系人记录对象传递给ContactsDetailsControl()方法以显示所选记录的联系人详细信息。将实体对象转换为IEnumerable

ItemsListBox.ItemsSource希望IEnumerable的对象列表

请告诉我该实体对象专用IEnumberable转换,而不必像做下面的sinmplest方式?

ItemsListBox.ItemsSource = new List().Add(contact);

public ContactsDetailsControl(ProActive.Contact contact) 
{ 
    InitializeComponent(); 
    List<Contact> l = new List<Contact>(); 
    l.Add(contact); 

    ItemsListBox.ItemsSource = contact[]; 
} 

回答

3

以下是使IEnumerable包含单个对象的通用方法。

public ContactsDetailsControl(ProActive.Contact contact) 
{ 
    InitializeComponent(); 
    ItemsListBox.ItemsSource = MakeMeEnumerable<Contact>(contact); 
} 

private IEnumerable<T> MakeMeEnumerable<T>(T Entity) 
{ 
    yield return Entity; 
} 
+0

你甚至需要callsite上的泛型类型参数吗? –

0

你将永远需要创建一个新的列表,您的联系人添加到它。单个联系人与联系人列表不同,您不能(并且不能)直接投射。

您可能希望创建另一个类,该类继承自List<contact>,您可以实例化并在构造函数中加载需要的联系人。

1

简单,但不漂亮,这样做的方法是使用Enumerable.Repeat

ItemsListBox.ItemsSource = Enumerable.Repeat(contact, 1); 
0

似乎没有人是你为什么要使用一个列表框时,你说你想会问的问题显示单个记录的信息?

如果要将模板应用于该项目,请使用ContentPresenter并设置ContentTemplate。 (在内部,这是列表框在为其源代码中的项目生成视觉效果时所执行的操作)。

1
ItemsListBox.ItemsSource = new [] { contact }; 
相关问题