2009-12-10 8 views
1

J'ai une exigence selon laquelle un utilisateur peut spécifier un nombre variable de champs définis par l'utilisateur, par exemple dans un fichier xml. Ces champs ont un nom convivial qui est affiché dans l'interface graphique, et un code qui est utilisé pour persister et récupérer la valeur du champ dans la base de données. Le problème est que j'ai besoin de mon service WCF pour consommer la liste des champs définis par l'utilisateur, de sorte que lorsque je charge un objet de ma base de données, ces champs et leurs valeurs sont chargés, mais j'ai aussi besoin de mon client WPF connaître les champs aussi afin que lorsque l'utilisateur crée un nouveau type d'objet, ces champs configurables sont disponibles sous forme d'entrées sous la forme de say, une zone de liste déroulante. J'ai essayé plusieurs façons de le faire et il semble que mettre les valeurs configurables dans le service est le meilleur moyen, puis obtenir que le client récupère les valeurs du service au démarrage. Mais je me demande s'il existe une façon «appropriée» de faire ce genre de chose, car cela semble être une exigence évidente pour la plupart des applications d'entreprise. Désolé, si la question est un peu vague, mais j'ai essayé de l'abstraire des complexités de mon programme individuel.Champs configurables par l'utilisateur WPF et WCF

Merci Chris

Répondre

1

Comment feriez-vous si WPF et WCF n'étaient pas impliqués? Comment cela fonctionnerait-il si c'était juste une bibliothèque de classe appelant l'autre? Vous créez une classe pour encapsuler vos champs définis par l'utilisateur, et vous passez ensuite une instance de cette classe à l'autre morceau de code.

Faites la même chose ici.

+0

Merci John, vous avez raison et c'est à peu près ce que je fais, j'ai juste pensé qu'il y avait peut-être quelque chose qui me manquait. Une sorte de modèle peut-être que les gens utilisent pour ce genre de scénario. – cjroebuck

0

Eh bien, comme pour le service WCF - vous pouvez toujours définir une chose immobilière comme:

[DataMember] 
List<OptionalProperty> optionalProperties { get; set; } 

puis définir votre type « OptionalProperty » en tant que contrat de données, aussi - tout à fait peut-être juste une classe avec un Key et Value comme chaîne ou quelque chose - ou tout ce dont vous avez besoin.

[DataContract] 
class OptionalProperty 
{ 
    [DataMember] 
    string Key { get; set; } 

    [DataMember] 
    string Value { get; set; } 
} 

Depuis une liste de quelque chose, vous pouvez avoir zéro, un, deux, cinq, fiveteen milliers etc.

pourrait que le travail pour votre scénario ??

+0

Merci Marc, c'est un peu plus compliqué car il existe différentes listes de champs définis par l'utilisateur par type d'objet. J'injecte et je passe un dictionnaire de >. Mais oui, c'est assez similaire à ce que je fais. Merci! – cjroebuck

+0

Vous devez, bien sûr, valider que seuls les champs définis par l'utilisateur pour le type d'objet particulier sont renvoyés avec cet objet. Cependant, la structure des données renvoyées sera identique dans tous les champs définis par l'utilisateur: code, nom, valeur, pour chaque champ. –