2013-11-01 377 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

謝謝你的樣品,我很感激。 –

相關問題