0

我有一个简单的 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的被填充了,但这些字段都是空的(!)。例如,在上面的例子中,我DataGrid的三行都是空的。奇怪的是调试的时候,filteredContacts包含了四个项目。

如何使用 LINQ 过滤我的自定义对象并让它们显示在我的DataGrid?

4

1 回答 1

3

我会尝试两件事:

  1. 改变

    theDataGrid.ItemsSource = filteredContacts;
    

    theDataGrid.ItemsSource = filteredContacts.ToList();
    
  2. 第二种是使用视图并在视图上过滤。

    ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(contacts);
    
    view.Filter = delegate(object item) { return (item as Contact).LastName.StartsWith("T"); };
    
    theDataGrid.ItemsSource = view;
    
于 2009-02-02T12:29:44.920 回答