Bindung von WPF DataGrid an DataTable mit TemplateColumns

8

Ich habe alles versucht und bin nicht weitergekommen, also hoffe ich, dass mir jemand den Aha-Moment geben kann. Ich kann einfach nicht die Bindung erhalten, um die Daten im Datagrid erfolgreich zu ziehen.

Ich habe eine DataTable, die mehrere Spalten mit MyDataType

enthält %Vor%

MyDataType hat 2 Eigenschaften (eine Zeichenkette, eine boolesche) Ich habe einen Test DataTable

erstellt %Vor%

Ich habe ein WPF DataGrid, das ich meine DataTable zeigen möchte. Aber alles, was ich tun möchte, ist zu ändern, wie jede Zelle gerendert wird, um [TextBlock] [Schaltfläche] pro Zelle mit Werten anzuzeigen, die an das MyData-Objekt gebunden sind, und hier habe ich eine Menge Probleme.

Mein XAML sieht so aus

%Vor%

Jetzt versuche ich nur einmal, die DataTable an das WPF DataGrid

zu binden %Vor%

TextBlock und Button werden angezeigt, aber sie binden nicht, wodurch sie leer bleiben. Könnte jemand mich wissen lassen, wenn sie eine Idee haben, wie man das repariert. Dies sollte einfach sein, das ist es, was Microsoft uns glauben macht. Ich habe die Column.CellTemplate während des AutoGenerating -Ereignisses gesetzt und bekomme immer noch keine Bindung.

Bitte helfen Sie !!!

    
Chris J 20.04.2010, 17:55
quelle

2 Antworten

14

Bearbeiten: Aktualisiert, um den Beitrag von Aran Mulholland zu reflektieren (siehe Kommentar)

Offenbar übergibt die DataGrid die gesamte DataRowView an jede Zelle. Deshalb funktioniert die Bindung nicht. Ihre DataTemplate erwartet, dass DataContext vom Typ MyData ist, aber stattdessen vom Typ DataRowView ist. Meine vorgeschlagene (etwas hack-ish) Problemumgehung, um das gewünschte DataContext zu erhalten, ist ein benutzerdefiniertes DataGridTemplateColumn zu erstellen, das das notwendige Element aus dem DataRowView extrahiert. Der Code ist unten:

%Vor% %Vor%

Hinweis: Dieser Ansatz scheint nur bei deaktivierter Containervirtualisierung oder im Standardmodus zu funktionieren. Wenn VirtualizationMode festgelegt ist Die Vorlage wird nicht wiederverwendet.

    
Joseph Sturtevant 21.04.2010 22:28
quelle
8

Nachdem ich diesen Thread gefunden hatte und Probleme mit dem hier gezeigten Code hatte, lief ich diesen Thread auf MSDN durch, und es funktioniert viel besser! Soweit ich gesehen habe, überhaupt keine Virtualisierungsprobleme.

Ссылка

Code:

%Vor%     
Quintalea 18.03.2011 16:46
quelle