2010-08-26 23 views
1

Étant donné une structure de données:F #/SilverLight liaison à des types de données algébriques

type Candidate = SalesRep of SalesRep | Analyst of Analyst 

type ScorableCandidate = { 
    candidate: Candidate ; 
    mutable comments: string ; 
    mutable score: int ; 
} 

et une grille de données qui veut être en mesure d'afficher ou l'autre des candidats, il est possible de lier (en utilisant la liaison WPF) au ScorableCandidate?

<telerik:GridViewDataColumn Header="First Name" DataMemberBinding="{Binding candidate.fname}" IsFilterable="False" Width="100"/> 

Je pense pas, comme la syntaxe de liaison serait bneed pour être en mesure de déconstruire le type - que je ne pense pas est possible.

Thx

T

+1

Je ne travaille pas avec WPF pour donner une bonne réponse, mais les petits projets sur lesquels j'ai travaillé ont fait usage de TypeConvertors clients (http://msdn.microsoft.com/en-us/library/aa970913.aspx) pour obtenir la fonctionnalité que vous voulez. – Juliet

Répondre

1

Je crois que vous ne devriez pas avoir de difficultés à accéder au champ candidate du type d'enregistrement (parce que les champs d'enregistrement apparaissent comme norme propriétés .NET).

En ce qui concerne l'union discriminée - J'aime la suggestion d'utiliser des convertisseurs de type personnalisés comme le suggère Juliet. Une autre option plus simple serait d'exposer le champ fname (qui est partagée par les deux SalesRep et Analyst si je comprends votre exemple à juste titre) comme une propriété du type Candidate:

type Candidate = 
    | SalesRep of SalesRep 
    | Analyst of Analyst 
    member x.Name = 
    match x with 
    | SalesRep s -> s.fname 
    | Analyst a -> a.fname 

alors vous devriez être en mesure d'utiliser la norme WPF syntaxe de liaison pour la liaison aux propriétés.

+0

Cela est revenu et je pense que c'est la solution que nous proposons. Je n'avais pas réalisé qu'une Union discriminée pouvait soutenir les membres ... – akaphenom