10
votes

Création d'un éditeur WPF pour le fichier XML basé sur le schéma

Voici le scénario. Nous utilisons un grand fichier de configuration XML pour l'un de nos produits serveur. Ce fichier est relativement bien placé et est validé contre un fichier XSD.

Il est temps de créer une interface graphique de configuration pour maintenir ce fichier et je voudrais plonger dans WPF pour le faire. Je pourrais poser un formulaire séparé pour chaque section de configuration, refactoring et redistributant chaque fois que nous ajoutons une option au fichier de configuration, mais j'espère qu'il existe un moyen plus intelligent de le faire.

Puisque j'ai déjà une combinaison XML / XSD fortement dactylographiée, j'espère qu'il existe une méthode élégante pour construire une interface utilisateur pour le modifier facilement. Je sais que je pouvais écrire une transformation XML-> xaml mais j'espérais qu'il y a quelque chose à faire pour faire la forte levée pour moi déjà?

Merci d'avance ..


0 commentaires

4 Réponses :


12
votes

Comment je ferais cela:

Je commencerais en construisant une classe de modèle de visualisation simple qui enveloppe autour d'un xmlelement et l'expose comme une option de configuration. Cette classe pourrait être extrêmement simple, par exemple: xxx

maintenant, je peux remplir une collection de ElementView Objets d'un < Code> XMLDOCUMUMUMUMENT , ajoutez cette collection à la fenêtre de la fenêtre et formatez les objets avec un simple DataTemplate , par exemple: xxx < / pré>

(Remarque: plus tard, vous pouvez obtenir une fantaisie et définir des sous-classes de optionview sur la base, par exemple, le type de données du sous-jacent xmlelement . ensuite Vous pouvez définir datatemplate s pour chaque sous-classe, et aussi longtemps que chacun présente l'élément dans une grille à deux colonnes à l'aide de ce SharedSizegroup , la deuxième colonne peut contenir un sélecteur de date, ou des boutons radio, ou tout ce qui conviendra à la sous-classe, et tout cela sera complètement aménagé au moment de l'exécution.)

Une fois que je le faisais, ce qui ne prendrait pas longtemps, je commencerais à s'étendre La classe optionview . Par exemple, si votre schéma stocke une étiquette lisible par l'homme pour un élément dans un élément XS: Annotation (et si ce n'est pas le cas, pourquoi pas?), Je ferais le Nom EXTRAIT DE PROPRIÉTÉ QUI SUR L'OUT DU XMLELEMENT SCHEMAINFO Propriété, au lieu d'exposer le nom de l'élément sous-jacent.

Je voudrais évidemment ajouter une validation, donc j'ajouterais une méthode de validation qui a examiné le xmlelement s schemainfo propriété et interprété. (En supposant que les éléments que vous validez sont un contenu simple, cela ne devrait pas être difficile.) Il y a un million de tutoriels sur la manière de mettre en œuvre la validation dans les applications WPF, donc je n'entrerai pas trop de détails ici.

S'il y a des tonnes d'options de configuration et que vous disposez d'une manière intelligente de les regrouper dans des catégories, je construirais une classe de niveau supérieure qui exposée (au moins) deux propriétés - une chaîne catégorieName propriété et un optionsviews Collection - remplissez-le à partir du document XML et ajoutez-le à la gossement de la fenêtre . Dans la fenêtre, je la lie à un tabcontrol , par exemple: xxx

ou à un contrôle de l'élément dont le modèle de conteneur d'élément crée un Expander . Ou quelque chose. (Tous les codes garantis non testés! La plupart d'entre elles ont été copiées à partir de projets de travail, cependant.)

Si vous n'avez rien fait avec WPF auparavant, c'est un très bon projet pour commencer. Cela vous exposera aux fondamentaux des contrôles de la liaison et de la validation des éléments de données, et le résultat final sera utile et probablement très bien.

Et vous remarquerez que lorsque le balisage impliqué dans la création des modèles est assez verbeux, il n'y a que deux modèles. Le seul code de l'application (jusqu'à présent) est le code qui expose le xmlelement s à l'interface utilisateur.


0 commentaires

4
votes

Vous allez ici, nous avons créé un pour votre exigence. Cet outil entièrement créé en gardant à l'esprit WPF.

http://wpfxmedoritor.codeplex.com/


2 commentaires

Prévoyez-vous de faire une publication pour votre éditeur? Il n'est actuellement que la source et il n'y a aucune indication de l'état du code (c'est-à-dire que c'est surtout complet? Alpha, bêta, stable?)


Je suis désolé pour une réponse tardive, je n'ai aucun plan de libération, vous pouvez le télécharger et le construire.



1
votes

pas WPF mais très éclairant - Un XML généré de manière dynamique Éditeur de données de Marc Clifton

Un article avec code source pour Windows formulaires sur la création d'une interface graphique pour éditer un XML basé sur XSD.

cherche longtemps à quelque chose comme ça.


0 commentaires

1
votes

Pour présenter des configurations XML simples (si les éditeurs personnalisés pour les valeurs ne sont pas requis), on peut directement lier XElement à une vue à l'aide de hierarchicaldaTemplate.

XAML: P>

class ConfigViewModel:INotifyPropertyChanged
{
    public XElement Xml { get; private set;}

    //example of persistence infrastructure
    public event PropertyChangedEventHandler PropertyChanged = delegate { };
    public void Load(string fileName)
    {
        Xml = XElement.Load(fileName);
        PropertyChanged(this, new PropertyChangedEventArgs("Xml"));
    }
    public void Save(string fileName)
    {
        Xml.Save(fileName);
    }
}


0 commentaires