2011-03-24 7 views
0

Я использую listBox.ItemsSource = e.Result.Persons, который представляет собой коллекцию людей. В списке отображаются фактические имена объектов, когда я хотел бы, чтобы оно отображало первое имя каждого объекта. Как я могу это сделать?Silverlight listbox question

ответ

1

use Listbox ItemTemplate. что-то вроде этого.

<ListBox> 
<ListBox.ItemTemplate> 
<DataTemplate> 
<TextBlock Text="{Binding FirstName}"/> 
</ListBox.ItemTemplate> 
</DataTemplate> 
</ListBox> 
0

В дополнение к способу связывания определяется другой ответ, вы могли бы просто привязать его следующим образом:

listBox.ItemsSource = e.Result.Persons.Select(d => new { FirstName }); 
+0

Мне не нравится такой способ достижения запрошенной функциональности, поскольку он заменит каждое появление экземпляров Person в ListBox содержимым FirstName. Например, вы, вероятно, не хотите этого поведения для свойства SelectedItem. – Eilistraee

+0

Согласен, но если Listbox действительно отключен от исходных данных, и ваше значение - это значение, которое вы хотите извлечь, это опция. Конечно, подход привязки - лучший способ, но этот вариант демонстрирует возможность отфильтровывать анонимные типы, чтобы удовлетворить ваши потребности. –

+0

Отличные поклонники дискуссии, я ценю это. – Sean

0

Или использовать выделенный "DisplayMemberPath" property, что делать именно то, что вы хотите легко и без какой-либо побочные эффекты (и дополнительная разметка):

<ListBox DisplayMemberPath="FirstName" /> 

Для более сложных представлений элементов используйте шаблоны (см. ниже).

0

Вы можете переопределить метод ToString() объекта Person, чтобы он отображал первое имя человека.