金融类应用程序示例 > 产生数据 |
我们的金融类应用程序使用一个模拟实际的提供不断更新的动态数据的实际服务器。
由于我们并非金融业专家,我们就从维基百科上获得了一些启示(http://en.wikipedia.org/wiki/Market_data)。
我们的数据源由FinancialData对象组成,用来表示典型的来自于NYSE,TSX,Nasdaq股票市场的数据信息。每个数据对象都包含这样的信息:
股票代码 | IBM |
---|---|
竞标价 | 89.02 |
询问价 | 89.08 |
竞标规模 | 300 |
询问大小 | 1000 |
最终销售价 | 89.06 |
最终size | 200 |
报价时间 | 14:32:45 |
交易时间 | 14.32.44 |
成交量 | 7808 |
事实上,这些信息通常是一个不同数据源的聚合,如报价数据(bid, ask, bid size, ask size),以及交易数据(last sale, last size, volume)均产生自不同的数据源。
为捕捉到的数据的动态性,我们的数据源对象提供了一个具有大约4000个FinancialData对象的FinancialDataList,以及一个计时器,按照预定的计划修改对象。调用方可以决定数值更新的频率以及单次更新发生时数值修改的范围大小。
将FinancialDataList绑定到grid,并在程序运行期间修改数据源更新参数,以查看grid如何做到紧跟数据源变化。
为检查数据源实现细节,请参见示例源代码中的FinancialData.cs文件。
将grid绑定至金融类数据源非常简单。我们创建了一个PagedCollectionView 做为一个中介的角色,提供常规的Currency,排序,分组,以及筛选服务,而不是直接将grid绑定到FinancialDataList。这里是代码:
C# |
拷贝代码
|
---|---|
// 创建数据源 var list = FinancialData.GetFinancialData(); var view = new PagedCollectionView(list); // 绑定数据源到grid _flexFinancial.ItemsSource = view; |
和前面的示例一样,我们设置AutoGenerateColumns属性为false并使用XAML创建grid的列:
XAML |
拷贝代码
|
---|---|
<fg:C1FlexGrid x:Name="_flexFinancial" MinColumnWidth="10" MaxColumnWidth="300" AutoGenerateColumns="False" > <fg:C1FlexGrid.Columns> <fg:Column Binding="{Binding Symbol}" Width="100" /> <fg:Column Binding="{Binding Name}" Width="250" /> <fg:Column Binding="{Binding Bid}" Width="150" Format="n2" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding Ask}" Width="150" Format="n2" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding LastSale}" Width="150" Format="n2" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding BidSize}" Width="100" Format="n0" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding AskSize}" Width="100" Format="n0" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding LastSize}" Width="100" Format="n0" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding Volume}" Width="100" Format="n0" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding QuoteTime}" Width="100" Format="hh:mm:ss" HorizontalAlignment="Center" /> <fg:Column Binding="{Binding TradeTime}" Width="100" Format="hh:mm:ss" HorizontalAlignment="Center" /> </fg:C1FlexGrid.Columns> </fg:C1FlexGrid> |