WPF DataGrid est rempli sauf lorsque j'utilise LINQ pour filtrer ses éléments
-
20-08-2019 - |
Question
J'ai un simple WPFToolkit DataGrid
:
<Grid>
<dg:DataGrid Name="theDataGrid"/>
</Grid>
Et dans le code derrière une Contact
classe simple:
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;
}
}
Dans mon constructeur principal dans code behind, je crée une collection List
et la lie à mon filteredContacts
:
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;
et cela fonctionne bien, mais si je filtre ces contacts avec LINQ comme ceci:
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;
Ensuite, mon <=> est rempli, mais tous les champs sont vides (!). Par exemple, dans le cas ci-dessus, mon <=> a trois lignes qui sont toutes vides. Étrangement lors du débogage, <=> contient quatre éléments.
Comment utiliser LINQ pour filtrer mes objets personnalisés ET les faire afficher dans mon <=>?
La solution
je voudrais essayer deux choses:
-
Modifier
theDataGrid.ItemsSource = filteredContacts;
à
theDataGrid.ItemsSource = filteredContacts.ToList();
-
La seconde consisterait à utiliser une vue et un filtre sur la vue.
ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(contacts); view.Filter = delegate(object item) { return (item as Contact).LastName.StartsWith("T"); }; theDataGrid.ItemsSource = view;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow