WPF DataGrid已被填充,除非我使用LINQ过滤其项目 [英] WPF DataGrid is filled except when I use LINQ to filter its items

查看:146
本文介绍了WPF DataGrid已被填充,除非我使用LINQ过滤其项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的WPFToolkit DataGrid

I've got a simple WPFToolkit DataGrid:

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

在一个简单的联系人的代码中

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

In my main constructor in code behind, I build a List collection and bind it to my 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过滤这些联系人:

and that works fine, but if I filter these contacts with LINQ like this:

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 包含四个项目。

Then my DataGrid is populated, but the fields are all empty (!). For example, in the above case, my DataGrid has three rows which are all empty. Strangely when debugging, filteredContacts contains four items.

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

How can I use LINQ to filter my custom objects AND get them to display in my DataGrid?

推荐答案

我会尝试两件事情:


  1. 更改

  1. Change

theDataGrid.ItemsSource = filteredContacts;

theDataGrid.ItemsSource = filteredContacts.ToList();


  • 第二个是在View上使用View和过滤器。

  • The second would be to use a View and filter on the View.

    ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(contacts);
    
    view.Filter = delegate(object item) { return (item as Contact).LastName.StartsWith("T"); };
    
    theDataGrid.ItemsSource = view;
    


  • 这篇关于WPF DataGrid已被填充,除非我使用LINQ过滤其项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆