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.