WPF - Bindowanie złożonych kolekcji do DataGrid

0

Witam

Mam pytanie odnośnie bindowania bardziej złożonych kolekcji do kontrolki DataGrid.

Gdy mamy zwykłą listę przechowującą typy wartościowe, to wystarczy podpiąć listę pod właściwość DataContext lub ściślej pod ItemSource. W przypadku list zawierających typy referyncyjne, musimy określić jak właściwości klasy będą bindowane w DataGrid. Wszystko jest fajnie, gdy pracujemy na modelu danych, gdzie mamy pojedyncze pola, bez żadnych kolekcji. Mam taką klasę:

public class Row
{
    public DateTime Timestamp { get; set; }
    public IEnumerable<double> Samples { get; set; }
}

2018-03-27_07h56_18.png

Wielokropek oznacza dalszy ciąg kolumn. Ich ilość zależy od wielkości kolekcji Samples. Oczywiście wszystkie kolekcje Samples są jednakowej długości.

Chciałbym, aby dało się to sprowadzić do prostego bindingu jak w przypadku prostszych typów, czyli:

DataGrid.ItemSource = rows; //rows - kolekcja typu IEnumerable<Row>

Zdaję sobie sprawę, że wymaga to jakichś edycji szablonu w konrolce DataGrid, a jestem w tym zielony. Wiem, że można przygotować sobie dane w DataTable i podpiąć property DefaultView, ale to mniej eleganckie rozwiązanie.
Chyba, że ktoś ma inne pomysły jak w wygodny sposób bindować?

1

Listy można bez problemu podpinać do kolumn jeśli mają stałą liczbe elementów znaną na etapie kompilacji:

 <DataGridTextColumn Binding="{Binding Samples[0]}" >
 <DataGridTextColumn Binding="{Binding Samples[1]}" >
....

Schodki się zaczynają dopiero wtedy gdy trzeba tworzyć dynamicznie kolumny w trakcie działania programu :D

0

Właśnie chodzi o to, że są tworzone dynamicznie w trakcie działania aplikacji. I raczej będą to wiele setek kolumn i więcej.

1

No to w xamlu tego nie zrobisz, trzeba napisać kod który będzie dodawał te kolumny za nas i ustawiał bindingi programowo.

Tutaj masz rozwiazanie oparte na AttachedProperty za pomocą którego możesz to osiągnąć:
https://stackoverflow.com/questions/320089/how-do-i-bind-a-wpf-datagrid-to-a-variable-number-of-columns/4379965

1 użytkowników online, w tym zalogowanych: 0, gości: 1