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 <=>?

Était-ce utile?

La solution

je voudrais essayer deux choses:

  1. Modifier

    theDataGrid.ItemsSource = filteredContacts;
    

    à

    theDataGrid.ItemsSource = filteredContacts.ToList();
    
  2. 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
scroll top