F # / Silverlight La unión a los tipos de datos algebraicos
-
01-10-2019 - |
Pregunta
Dada una estructura de datos de:
type Candidate = SalesRep of SalesRep | Analyst of Analyst
type ScorableCandidate = {
candidate: Candidate ;
mutable comments: string ;
mutable score: int ;
}
y una red de datos que quiere ser capaz de mostrar cualquiera de los candidatos, es posible que se unen (mediante la unión de WPF) a la ScorableCandidate?
<telerik:GridViewDataColumn Header="First Name" DataMemberBinding="{Binding candidate.fname}" IsFilterable="False" Width="100"/>
No estoy pensando, ya que la sintaxis vinculante bneed para poder deconstruir el tipo -., Que no creo que es posible
Thx
T
Solución
Creo que no debería tener problemas para acceder al campo de candidate
del tipo de registro (porque los campos de registro aparecen como propiedades estándar de .NET).
En cuanto a la unión discriminada - Me gusta la sugerencia de convertidores de tipo uso personalizado tal y como sugiere Julieta. Otra opción más sencilla sería exponer el campo fname
(que es compartida por ambos SalesRep
y Analyst
si entiendo tu ejemplo correctamente) como una propiedad del tipo Candidate
:
type Candidate =
| SalesRep of SalesRep
| Analyst of Analyst
member x.Name =
match x with
| SalesRep s -> s.fname
| Analyst a -> a.fname
A continuación, debería ser capaz de utilizar la sintaxis de enlace para la unión a las propiedades de WPF estándar.