2013-11-01 131 views
0

使用F#,我使用FreeBase类型提供程序(FSharp.Data)随机播放数据,并且无法将返回的数据可视化。由于我使用的是(WPF型)DataGrid和我然后用东西集合(化学元素,明星等)填充ItemsSource使用F#可视化Freebase数据(类型提供程序)

什么我得到的是填充了DataGrid时,“跳过”我希望可视化该实体的一些属性,例如每个实体都拥有的MainImage。 IEnumerable类型的其他属性也不可视化。 “

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

在由Don赛姆F#的演示视频中,我看到他是用同样的事(WPF一个DataGird) 这里的演示:http://www.youtube.com/watch?v=-SGPEUuG1I8(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 

显示数据

代码,我使用它是这样的:

freebase.Commons.Astronomy.Stars |> Seq.take 10 |> show 

数据检索工作正常,电网不会呈现全部的东西!我在这里错过了什么?

回答

1

使用的特设数据绑定grid.ItemsSource <- data默默地假定data集合中的项目的基础类型允许将每个列值合理地呈现到网格单元中。但是这样的假设太强大了,永远不会是真的!

约束表达式freebase.Commons.Astronomy.Stars |> Seq.take 10具有类型 seq<FreebaseData.ServiceTypes.Astronomy.Astronomy.StarData>。反过来,StarData属性可能是任何东西。例如,属性Also known as本身等于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 -palatable型 Linq.IQueryable<string * Nullable<float<Data.UnitSystems.SI.UnitNames.metre>>>。然后结合

grid.ItemsSource <- fiveClosestStars 

产生预期的视觉体验

孙                                          149597987918.808
Proxima Centauri   4。014161112E + 16
狼359                             7.3747752E + 16个
天狼星                                      8.1461952E + 16
牵牛星                                        1.58295384E + 17

+0

这正常工作与字符串和整数,但在的情况下,类型ImageData(SomeEntity.MainImage)我得到的是该图像的网址,但这不会呈现在D ataGrid impicitly! –

+1

我不知道WPF DataGrid将图像隐式绑定到列的功能。在由Don Syme演示的AFAIK中,您提到了您的问题,此功能由 F#自定义绑定代码的100行代替。你可能想从 [类似的演示来源]探索'show-wpf40.fsx'(http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-22- 06-15/BuildDemo.zip)了解更多详情。 –

+0

谢谢你的样品,我很感激。 –

相关问题