يتم ملء WPF DataGrid إلا عندما أستخدم LINQ لتصفية عناصره
-
20-08-2019 - |
سؤال
لقد حصلت على WPToolkit بسيط 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
?
المحلول
سأحاول شيئين:
يتغير
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