Wpf 使用F#(类型提供程序)可视化Freebase数据
在F#中,我使用了FreeBase类型提供程序(FSharp.Data)来处理随机数据,但我无法可视化返回的数据。当我使用一个(基于WPF的)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的
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