У меня есть простой WPFToolkit DataGrid
:WPF DataGrid заполняется только при использовании LINQ для фильтрации его элементов
<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;
}
}
В моих главный конструктор позади кода, я собираю коллекцию и привяжу ее к моим 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
заселена, но поля пусты. Например, в приведенном выше случае мой DataGrid
имеет три строки, все из которых пусты. Странно, когда отладка, filteredContacts
содержит четыре элемента.
Как использовать LINQ для фильтрации моих пользовательских объектов и заставить их отображать в моем DataGrid
?
Ваше первое предложение работало отлично, спасибо! :-) –
CollectionViewSource - лучший способ пойти, это сделано для того, чтобы сделать это точно. У меня есть пример на моем сайте, если вы смотрите http://www.jarloo.com/excel-like-autofilter-in-wpf/ – Kelly