Anonyme Typen an ein Silverlight Datagrid binden

Was soll ich sagen, man lernt nie aus. In meiner aktuellen Silverlight Schulung saß ein Kurs Teilnehmer der es genau wissen wollte. Mein Silverlight Beispiel zeigt wie man mit minimalen Aufwand einen RSS Feed (hier n-tv) an ein Datagrid bindet. Dafür braucht man eine Klasse (hier rss) mit Eigenschaften (hier title) die Public sind. Struct geht schon mal nicht.

Der sehr einfache Silverlight Prototyp:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        Dim wc As New WebClient
        AddHandler wc.DownloadStringCompleted, AddressOf fertig
        wc.DownloadStringAsync(New Uri("xmlfile1.xml", UriKind.Relative))
    End Sub

    Private Sub fertig(ByVal sender As Object, ByVal e As DownloadStringCompletedEventArgs)
        Dim xml = XDocument.Parse(e.Result)
        Dim query = From x In xml.Descendants("item")
                    Select New rss With {.titel = x.<title>.Value}
        DataGrid1.ItemsSource = query
    End Sub

End Class
Public Class rss
    Public Property titel As String
End Class

Die Ausgabe in der Silverlight Anwendung dann ungefähr so.

image

Der liebe Silverlight Kurs Teilnehmer war faul und wollte es mit anonymen Typen versuchen also ohne die RSS Klasse zu erstellen ala

 Dim query = From x In xml.Descendants("item")
                    Select New With {.titel = x.<title>.Value}
        DataGrid1.ItemsSource = query

Das Ergbebnis dann

image

Meine Antwort ist halt so. Anonym geht eben nicht da diese als internal deklariert sind und deshalb nicht sichtbar. Da mein Teilnehmer mit Testing ganz versiert war wusste er das man innen nach außen kehren kann mit InternalsVisibleTo. Dies muss man in der Datei AssemblyInfo.vb deklarieren. Üblicherweise befindet sich diese im Verzeichnis Properties der Silverlight Anwendung. Wenn nicht vorhanden einfach anlegen und folgendes reintippen.

<Assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Windows")> 

Und schwupp gehts auch anonym.

Kommentare sind geschlossen