WPF Datagrid는 LINQ를 사용하여 항목을 필터링 할 때를 제외하고 채워집니다.
-
20-08-2019 - |
문제
간단한 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
?
해결책
나는 두 가지를 시도 할 것입니다.
변화
theDataGrid.ItemsSource = filteredContacts;
에게
theDataGrid.ItemsSource = filteredContacts.ToList();
두 번째는보기에 뷰와 필터를 사용하는 것입니다.
ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(contacts); view.Filter = delegate(object item) { return (item as Contact).LastName.StartsWith("T"); }; theDataGrid.ItemsSource = view;
제휴하지 않습니다 StackOverflow