Frage

Ich habe einen einfachen WPFToolkit DataGrid bekomme:

<Grid>
    <dg:DataGrid Name="theDataGrid"/>
</Grid>

Und in Code hinter einer einfachen Contact Klasse:

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;
    }
}

In meinem Haupt-Konstruktor in Code-behind, baue ich eine List Sammlung und binden Sie es an meine 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;

und das funktioniert gut, aber wenn ich diese Kontakte mit LINQ wie folgt filtern:

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;

Dann ist mein DataGrid ist bevölkert, aber die Felder sind leer (!). Zum Beispiel in dem obigen Fall, mein DataGrid hat drei Reihen, die alle leer sind. Merkwürdiger beim Debuggen, filteredContacts enthält vier Elemente.

Wie kann ich LINQ verwenden, um meine benutzerdefinierte Objekte zu filtern und erhalten sie in meinem DataGrid angezeigt werden?

War es hilfreich?

Lösung

Ich würde versuchen, zwei Dinge:

  1. Ändern

    theDataGrid.ItemsSource = filteredContacts;
    

    theDataGrid.ItemsSource = filteredContacts.ToList();
    
  2. Die zweite wäre, eine Ansicht und Filter auf der Ansicht zu verwenden.

    ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(contacts);
    
    view.Filter = delegate(object item) { return (item as Contact).LastName.StartsWith("T"); };
    
    theDataGrid.ItemsSource = view;
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top