2011-01-13 7 views
1

Ich habe XSDs als Daten in einem SQL Server-XML- oder Oracle XMLType-Feld gespeichert. Ich erhalte eine XSD aus der Datenbank als XDocument. Ich möchte dieses XDocument in einer WPF-Baumansicht anzeigen. Dies ist relativ einfach, wenn ich das Xdocument direkt an die Baumansicht mit einem xmldataprovider und einer hierarchicalDataTemplate binde.Anzeigen eines XDocuments als WPF-Strukturansicht mithilfe eines MVVM ViewModel

Allerdings verwendet meine Anwendung das mvvm-Muster und ich möchte das xdocument in der ViewModel-Ebene darstellen, an das die Baumansicht dann ähnlich wie der Artikel von Josh Smith über das Binden der WPF-Strukturansicht an ViewModels bindet. http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

Mein Ziel ist es, einen XNode der XSD (XDocument) zu wählen.

Irgendwelche Vorschläge, wie ich das XDocument einer XSD im ViewModel darstellen könnte, damit ich einen XNode auswählen kann?

Antwort

0

Wenn Sie Nur-Lese-Operationen durchführen, empfehle ich Ihnen, es einfach zu halten und keine neuen Klassen einzuführen, die keinen Nutzen bringen. Hinterlassen Sie einfach einen Kommentar, dass Sie ein Ansichtsmodell hinzufügen sollten, wenn Sie die Bearbeitung der Struktur unterstützen möchten. Selbst wenn Sie das Dokument bearbeiten möchten, können Sie abhängig von Ihren Anforderungen möglicherweise immer noch direkt an das Dokument und die Knoten binden.

Wenn Sie erweiterte Unterstützung benötigen (wie INotifyPropertyChanged), empfehle ich, dass Sie eine Hierarchie von Klassen wie die ursprüngliche API erstellen, basierend auf XObject. Ich würde nur Eigenschaften hinzufügen, die ich direkt in der Benutzeroberfläche unterstützen wollte. Ich würde dann eine separate Modellklasse erstellen, die von der XDocumentViewModel Hierarchie in eine echte XDocument und zurück konvertieren könnte.

... wie [zu] das XDocument einer XSD im ViewModel darstellen, damit ich einen XNode auswählen kann.

Was meinst du mit wählen?

Wenn Sie in der Benutzeroberfläche bedeuten, dann ist das in der XAML erledigt.

Wenn Sie das Abfragemodell abfragen, können Sie versuchen, die vorhandene LINQ XML-Abfragungs-API für das zugrunde liegende Dokument zu verwenden. Behalten Sie ein internes Wörterbuch bei, das XObjects zurück zu Ihren Ansichtsmodellobjekten abbildet, und wenn Sie Ergebnisse erhalten, suchen Sie einfach jedes Ergebnis im Wörterbuch nach, bevor Sie es zurückgeben.