F#/ SIlverlight绑定到代数数据类型

时间:2010-08-26 16:22:08

标签: silverlight f# algebraic-data-types

给定数据结构:

type Candidate =  SalesRep of SalesRep | Analyst of Analyst

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

和一个想要能够显示任一候选者的数据网格,是否可以将(使用WPF绑定)绑定到ScorableCandidate?

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

我不这么认为,因为绑定语法会导致能够解构类型 - 我认为这是不可能的。

THX

Ť

1 个答案:

答案 0 :(得分:1)

我相信您在访问记录类型的candidate字段时不会遇到任何问题(因为记录字段显示为标准.NET属性)。

关于受歧视的联盟 - 我喜欢Juliet建议的使用自定义类型转换器的建议。另一个更简单的选择是将fname字段(SalesRepAnalyst共享,如果我正确理解您的示例)作为Candidate类型的属性公开:

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

然后,您应该能够使用标准WPF绑定语法来绑定属性。