Rendu d’une interface utilisateur à l’aide d’IValueConverter en utilisant uniquement du code c #

Je suis c # et silverlight-5 débutant.

Tout d’abord, je devais créer un object en désérialisant une chaîne XML. C’est ce que j’ai fait avec succès, mais ma prochaine étape consiste à créer une interface graphique à l’aide des éléments d’object. J’ai l’idée que je dois utiliser ” IValueConverter ” pour le faire. Mais comment ça je ne sais pas.

Ma classe de programme qui contient l’object est comme ceci:

 using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Runtime.Serialization.Json; using System.Runtime; using System.Xml.Serialization; using System.Runtime.Serialization; using System.IO; using System.Collections.Generic; using System.Diagnostics; using System.Xml; using System.Collections; namespace Model.XML { public class ProgramControl { public static void Main() { ssortingng xmlssortingng = @"  max_amount  Millions  Combo  Integer 4 0  5 10 20 50    "; XmlSerializer deserializer = new XmlSerializer(typeof(Parameter)); XmlReader reader = XmlReader.Create(new SsortingngReader(xmlssortingng)); Parameter parameter = (Parameter)deserializer.Deserialize(reader); foreach (var item in parameter.Component.Atsortingbutes.Items) { Debug.WriteLine(item); } Debug.WriteLine(parameter.Component.Type); Debug.WriteLine(parameter.Name); Debug.WriteLine(parameter.Label); Debug.WriteLine(parameter.Unit); } } } 

Maintenant, la question est de savoir comment puis-je créer une interface graphique à partir de l’object obtenu lors de la désérialisation (IValueConverter)?

EDIT: J’ai une petite idée de la façon dont cela peut être réalisé:

La première chose est dans la classe contenant l’interface “IValueConverter”, nous devons convertir (en utilisant la fonction Convert ()) les objects (obtenus lors de la désérialisation) en parameters, puis passer ces paramétrages xaml codewhich contient le conteneur pour restituer l’interface graphique que nous venons de créer en utilisant c #.

Et dans le code Xaml, nous avons juste besoin de créer un conteneur qui affichera la liste déroulante ainsi que d’autres étiquettes et textes que nous avons créés en code c # à l’étape précédente. (Il n’est pas nécessaire de créer une liste déroulante en utilisant xaml ici, elle est créée en code c # à l’intérieur de la classe contenant l’interface IValueConverter qui renvoie l’interface utilisateur).

Par exemple: (C’est une idée approximative pour vous faire comprendre correctement, il peut y avoir une erreur de syntaxe):

Ma classe “MyValueConverter.cs” est supposée:

 public class MyValueConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { List list = value as List; List result = new List(); foreach(parameter p in list) { UIElement newEle = null; if (p.component.type == "Combo") { newEle = new ComboBox(); } result.add(newEle); } return result; ///////////////////////////////////////////////// //////////////// and so on :///////////////////// ///////////////////////////////////////////////// } } 

Alors que dans le fichier xaml, je dois créer un conteneur qui rendra l’interface utilisateur créée en c # (classe d’interface IValueConverter). Nous devons donc choisir n’importe quel conteneur capable de restituer la liste déroulante, le libellé, le texte de toutes les données affichées dans l’interface graphique de l’instantané (conatiner pourrait être StackPanel car il y a plus d’une chose à afficher) .

mon code xaml sera juste contenir un conteneur comme celui-ci:

         

Toute aide pour y parvenir s’il vous plaît? S’il vous plaît n’hésitez pas à demander si ne pouvait pas encore comprendre.

Vous pouvez utiliser des types de données implicites pour cela.

Dans votre xaml, vous définissez un modèle pour un type de données donné:

        

Vous feriez mieux de créer différents types en fonction de la valeur de type-element. Une autre solution consiste à créer un grand modèle pour le type Parameter et à afficher les éléments appropriés en fonction du contenu du type Parameter. Mais je ne recommanderais pas cette approche.

Ensuite, vous pouvez utiliser un ItemsControl pour afficher tous les parameters:

  

Les différents parameters seront rendus de différentes manières en fonction de leur type.