0

私は単純な 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コレクションを作成し、それを 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で次のようにフィルタリングすると:

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;

次に、myDataGridが入力されますが、フィールドはすべて空です (!)。たとえば、上記の場合、myDataGridにはすべて空の行が 3 つあります。デバッグ時に不思議なことに、filteredContacts4 つの項目が含まれています。

LINQ を使用してカスタム オブジェクトをフィルター処理し、それらを my に表示するにはどうすればよいDataGridですか?

4

1 に答える 1

3

私は2つのことを試します:

  1. 変化する

    theDataGrid.ItemsSource = filteredContacts;
    

    theDataGrid.ItemsSource = filteredContacts.ToList();
    
  2. 2 つ目は、View と View のフィルターを使用することです。

    ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(contacts);
    
    view.Filter = delegate(object item) { return (item as Contact).LastName.StartsWith("T"); };
    
    theDataGrid.ItemsSource = view;
    
于 2009-02-02T12:29:44.920 に答える