2012-12-29 15 views
5

Ho un'applicazione F # WPF con classi di modelli di viste. Queste classi devono essere pubbliche per poter essere utilizzate in XAML come tipi di dati.Associazioni discriminate F # e associazione dati WPF

Il problema è che sembra che quando si utilizza la ricorsione di tipo F # (e), quindi i tipi subordinati non sono accessibili - o sembrano non essere. Vale a dire che, dato questo esempio:

type Foo() = 

    member this.Bar = new Bar() 

and Bar() = 

    member this.Foo = new Foo() 

quindi Barra non accessibile in XAML.

Ho provato a prefisso Foo con pubblico e Bar anche. Ho anche provato a creare un sinonimo. Nessuno di questi cambiamenti ha risolto il problema.

È davvero così o funziona "sto sbagliando"? Se è il modo in cui funziona, posso forzare i tipi subordinati (Bar, nell'esempio) a essere pubblici?

Grazie! :-)

Aggiornamento 1: A un'ispezione più ravvicinata (dotPeek) sembra che l'accesso sia lo stesso. Il compilatore F # crea una classe esterna statica Foo e una classe nidificata Foo. Fa lo stesso con Bar. Sono tutti contrassegnati come pubblici. Ora sono perplesso sul motivo per cui Bar non è accessibile dall'interno di XAML.

Aggiornamento 2: risolto. Alla WPF non piacciono i sindacati discriminati. Uno o più tipi subordinati utilizzano unioni discriminate e questo impedisce di essere utilizzato per l'associazione XAML.

risposta

7

A WPF non piacciono i sindacati discriminati. Uno o più tipi subordinati utilizzano unioni discriminate e questo impedisce di essere utilizzato per l'associazione XAML. Non del tutto ovvio, ma quello era il problema.

Problemi correlati