F # / SIlverlight Связывание с алгебраическими типами данных - PullRequest
1 голос
/ 26 августа 2010

Учитывая структуру данных:

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

T

1 Ответ

1 голос
/ 27 августа 2010

Я полагаю, что у вас не должно возникнуть проблем с доступом к полю candidate типа записи (поскольку поля записи отображаются как стандартные свойства .NET).

Относительно различаемого объединения - мне нравится предложениеиспользовать пользовательские преобразователи типов, как предлагает Джульетта.Другим более простым вариантом было бы выставить поле fname (которое совместно используется SalesRep и Analyst, если я правильно понимаю ваш пример) как свойство типа Candidate:

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

Тогда вы сможете использовать стандартный синтаксис привязки WPF для привязки к свойствам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...