Wpf 使用F#(类型提供程序)可视化Freebase数据

Wpf 使用F#(类型提供程序)可视化Freebase数据,wpf,datagrid,f#,type-providers,f#-3.0,Wpf,Datagrid,F#,Type Providers,F# 3.0,在F#中,我使用了FreeBase类型提供程序(FSharp.Data)来处理随机数据,但我无法可视化返回的数据。当我使用一个(基于WPF的)DataGrid时,我用一些东西(化学元素、星星等)填充ItemsSource 我得到的是,当填充DataGrid时,它“跳过”我想要可视化的实体的一些属性,例如每个实体都具有的主映像。字符串的IEnumerable类型的其他属性也没有被可视化 “未可视化”表示没有为该属性创建列 在Don Syme的F#演示视频中,我看到他正在使用相同的东西(带有WPF的

在F#中,我使用了FreeBase类型提供程序(FSharp.Data)来处理随机数据,但我无法可视化返回的数据。当我使用一个(基于WPF的)
DataGrid
时,我用一些东西(化学元素、星星等)填充
ItemsSource

我得到的是,当填充
DataGrid
时,它“跳过”我想要可视化的实体的一些属性,例如每个实体都具有的主映像。字符串的IEnumerable类型的其他属性也没有被可视化

“未可视化”表示没有为该属性创建列

在Don Syme的F#演示视频中,我看到他正在使用相同的东西(带有WPF的数据网格) 这是演示:(6分钟)我不确定他是否在使用自定义网格!看着那个网格,我原以为它是默认的!因为它以一种非想象的方式呈现所有属性

我用来用WPF显示数据的代码

open System.Windows
open System.Xaml
open System.Windows.Controls
open System.Media

let main = new Window()
main.Height <- 600.0
main.Width <- 500.0

let grid = new DataGrid()
grid.SetValue(DataGrid.FontSizeProperty,20.0)  
main.Content <- grid

let show data =
     match main.IsLoaded with
     | true -> grid.ItemsSource <- data
     | false -> main.Show(); grid.ItemsSource <- data

数据检索工作正常,网格不会呈现所有内容!这里缺少什么?

使用的特殊数据绑定
grid.ItemsSource Seq.take 10
具有类型
seq
。反过来,
StarData
属性可以是任何东西。例如,属性
也称为
本身就构成了
IEnumerable
。默认情况下,它应该如何呈现给网格单元

如果我们提供一个数据投影来确保绑定的默认可视化,那么一切都会正常。例如,显示距离地球最近的五颗恒星的名称和距离可以投影如下:

let astronomy = data.``Science and Technology``.Astronomy
let fiveClosestStars =
    query { for e in astronomy.Stars do
               where e.Distance.HasValue 
               sortBy e.Distance.Value
               take 5
               select (e.Name, e.Distance) } 
其中,
fiveClosestStars
现在有了
DataGrid
——令人满意的类型
Linq.IQueryable
。然后绑定

grid.ItemsSource <- fiveClosestStars 

grid.ItemsSource这可以很好地处理字符串和整数,但对于ImageData类型(SomeEntity.MainImage),我得到的只是该图像的url,但这不会在DataGrid中不必要地呈现!我不知道WPF DataGrid能够隐式地将图像绑定到列。在你的问题中提到的Don Syme的演示中,这种功能是由100行F#自定义绑定代码支持的。您可能需要从中浏览
show-wpf40.fsx
以了解更多详细信息。
grid.ItemsSource <- fiveClosestStars