WPF Datagrid는 LINQ를 사용하여 항목을 필터링 할 때를 제외하고 채워집니다.

StackOverflow https://stackoverflow.com/questions/503014

문제

간단한 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 모두 비어있는 3 개의 행이 있습니다. 이상하게도 디버깅 할 때 filteredContacts 4 개의 항목이 포함되어 있습니다.

LINQ를 사용하여 사용자 정의 객체를 필터링하고 내 DataGrid?

도움이 되었습니까?

해결책

나는 두 가지를 시도 할 것입니다.

  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;
    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top