سؤال

لقد حصلت على 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?

هل كانت مفيدة؟

المحلول

سأحاول شيئين:

  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