У меня есть простой WPFToolkit DataGrid
:
<Grid>
<dg:DataGrid Name="theDataGrid"/>
</Grid>
А в коде простой Contact
класс:
public class Contact
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Contact(string firstName, string lastName)
{
this.FirstName = firstName;
this.LastName = lastName;
}
}
В моем главном конструкторе в коде я создаю коллекцию List
и привязываю ее к моему DataGrid
:
List<Contact> contacts = new List<Contact>();
contacts.Add(new Contact("John", "Tester"));
contacts.Add(new Contact("Jill", "Tester"));
contacts.Add(new Contact("Joe", "Tester"));
contacts.Add(new Contact("Jimmy", "Nontester"));
theDataGrid.ItemsSource = contacts;
и это прекрасно работает, но если я отфильтрую эти контакты с помощью LINQ, вот так:
List<Contact> contacts = new List<Contact>();
contacts.Add(new Contact("John", "Tester"));
contacts.Add(new Contact("Jill", "Tester"));
contacts.Add(new Contact("Joe", "Tester"));
contacts.Add(new Contact("Jimmy", "Nontester"));
var filteredContacts = contacts.Where(contact => contact.LastName.StartsWith("T"));
theDataGrid.ItemsSource = filteredContacts;
Тогда мой DataGrid
заполняется, но поля все пусты (!). Например, в приведенном выше случае my DataGrid
имеет три строки, которые все пусты. Как ни странно, при отладке filteredContacts
содержит четыре элемента.
Как я могу использовать LINQ для фильтрации своих пользовательских объектов и отображения их в моем DataGrid
?