DataGrid und private klassen.

Dass Fehlermeldungen in Silverlight manchmal kryptisch sind ist ja nix neues. Nun fand sich aber ein beispielloser Fall nichtsaussagender Fehlermeldung überhaupt.

Ich habe für die Anzeige in einem DataGrid ein paar Daten aufbereitet. Dazu habe ich in meinem Control eine innere Klasse erstellt die meine Daten wrapt, in einer Methode zum Abfüllen einen IEnumberable<T> dieses Typs zusammengestellt und ihn an das DataGrid gebunden. Während der Ausführung bekam ich dann beim binden der Daten diese Fehlermeldung präsentiert: „Error HRESULT E_FAIL has been returned from a call to a COM component.“ Der StackTrace gab zu erkennen, dass der Fehler in der „Measure()“ Methode des DataGrids auftrat als eine neue Zeile hinzugefügt wurde.

Der Fehler an sich ist ja schon einmal nichtssagend, da die Fehlermeldung von Measure() geworfen wird könnte man jetz annehmen, dass es irgendein Problem mit der Größenberechnung aufgrund der Daten gibt. Nichts dergleichen. Nachdem ich ein wenig mit den Spaltendefinitionen rumgespielt habe kam ich irgendwann zu dem Schluss dass es irgendwas mit meiner Klasse zu tun haben muss, es blieb einfach nichts anderes mehr übrig da ich die Definitionen soweit gekürzt habe, dass sie auf einem Stand waren an dem es vorher mit einer anderen Klasse funktionierte.

Das Problem liegt dann auch ganz einfach an der Sichtbarkeit: die innere Klasse darf nicht private sein! Danke für die Hilfreiche Fehlermeldung MS…