Я использую listBox.ItemsSource = e.Result.Persons
, который представляет собой коллекцию людей. В списке отображаются фактические имена объектов, когда я хотел бы, чтобы оно отображало первое имя каждого объекта. Как я могу это сделать?Silverlight listbox question
0
A
ответ
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
Или использовать выделенный "DisplayMemberPath" property, что делать именно то, что вы хотите легко и без какой-либо побочные эффекты (и дополнительная разметка):
<ListBox DisplayMemberPath="FirstName" />
Для более сложных представлений элементов используйте шаблоны (см. ниже).
0
Вы можете переопределить метод ToString() объекта Person, чтобы он отображал первое имя человека.
Мне не нравится такой способ достижения запрошенной функциональности, поскольку он заменит каждое появление экземпляров Person в ListBox содержимым FirstName. Например, вы, вероятно, не хотите этого поведения для свойства SelectedItem. – Eilistraee
Согласен, но если Listbox действительно отключен от исходных данных, и ваше значение - это значение, которое вы хотите извлечь, это опция. Конечно, подход привязки - лучший способ, но этот вариант демонстрирует возможность отфильтровывать анонимные типы, чтобы удовлетворить ваши потребности. –
Отличные поклонники дискуссии, я ценю это. – Sean