2016-04-14 29 views
0

WPF DataGrid öğesinin belirli bir sütunundaki tüm öğeleri almanın basit bir yolunu arıyorum. Ben bir referans olarak DataGrid, DataGridColumn ve DataGridColumnHeader hem var, ancak öğeleri alma mantıksal bir yol bulmak için görünmüyor.WPF DataGrid - sütuntan öğeleri al

DataGridColumn'un Header özelliğini kullanmak, bazı durumlarda özel bir Header nesnesi kullandığım gibi bir seçenek değildir.

+0

datagrid yapılandırılmış koleksiyon gelmek bağlamak gerekir ... gibi ObservableCollection aramaya Belirli bir satırın MyDataClass ve gerekli özellikteki alıcıyı kullanın – Divisadero

+0

Belirli bir durum değil, genel bir denetim hazırlıyorum. Ve bunun için hangi özelliğin hangi sütuna bağlı olduğunu bilmem gerekiyor. Ben, hem dg hem de dgc'yi sağladıktan sonra, belirli bir sütundaki verileri bir veri kılavuzunda döndürecek genel bir çözüm arıyorum. – fonix232

+0

ve hangi özelliğin hangi başlık için gösterilmesi gerektiğini nasıl kontrol edersiniz? Daha sonra – Divisadero

cevap

0

Daha önce DataGrid örneğiniz varsa bunu yapmak oldukça kolaydır. DataGrid sütunundaki tüm öğeleri saymak için kullanabileceğiniz basit bir uzantı yöntemi.

namespace Extensions 
{ 
    public static class DataGridExtension 
    { 
     public static IEnumerable<FrameworkElement> GetItemsInColumn(this DataGrid dg, int col) 
     { 
      if (dg.Columns.Count <= col) 
       throw new IndexOutOfRangeException("Column " + col + " is out range, the datagrid only contains " + dg.Columns.Count + " columns."); 
      foreach (object item in dg.Items) 
      { 
       yield return dg.Columns[col].GetCellContent(item); 
      } 
     } 
    } 
} 

Sonra sadece örneğini almak başlığını kullanmamalısınız ... sadece yapabileceği yöntemi,

dg.GetItemsInColumn(colNumber); 
+0

DataGrid'i bağladıysanız, o zaman 'dg.Items', gerçek' DataGridRow' değil, öğelerinizin toplanmasını döndürür. Her bir öğe için gerçek UI elemanını istiyorsanız, her öğe ile ilişkili UI öğesini elde etmek için 'ItemContainerGenerator' kullanmanız gerekeceğine inanıyorum, ancak Sanallaştırma açıksa muhtemelen düzgün çalışmaz bile (varsayılan) UI öğeleri yeniden kullanıldığından, yalnızca Veri değiştiğinde. – Rachel

+0

Rachel, dg.ItemsSource kaynağına doğrudan öğelere bağlanmak istemezsiniz. Öğeler, içeriği oluşturmak için kullanılan öğelerin bir listesini içerecek ve bu nedenle GetCellContent bu amaçla aşırı yüklendi. https://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcolumn.getcellcontent%28v=vs.110%29.aspx –

+0

Hrm belki de yanıldım ve DataGrid farklı, ama düşündüm Öğelerin listelerini görüntülemek için diğer denetimler (TabControl, ListBox, ComboBox, vb) '.Items' özelliği, gerçek UI öğeleri değil, ilişkili öğelerin listesini döndürür. DataGrid'in aynı şekilde çalışıp çalışmadığını doğrulamak için DataGrid ile bir test çalıştırmam gerekecek, ancak bunun olacağını sanıyorum. Aynı zamanda, sanallaştırma ile ilgili aynı nokta da geçerli olacaktır; – Rachel