使用F#,我使用了FreeBase类型提供程序(FSharp.Data)来处理随机数据,我无法可视化返回的数据。当我使用(基于WPF)DataGrid
然后我用{(1}}填充某些东西(化学元素,星等)时填充
我得到的是,当填充ItemsSource
时,它会“跳过”我想要可视化的实体的某些属性,例如每个实体都有的MainImage。 IEnumerable类型的其他属性也没有可视化。
“未被可视化”,表示没有为该属性创建列。
在Don Syme的F#演示视频中我看到他正在使用相同的东西(带有WPF的DataGird) 这是演示:http://www.youtube.com/watch?v=-SGPEUuG1I8(6分钟)我不确定他是否使用自定义网格!我曾预料到,看着那个网格,它是默认的!因为它以非奇特的方式呈现所有属性!
代码我以前用WPF显示数据
DataGrid
我这样用它:
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
数据检索工作正常,网格不会渲染所有东西!我在这里缺少什么?
答案 0 :(得分:1)
使用过的ad-hoc数据绑定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
- 可口的类型
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