2012-06-13 4 views
1

нужно отображать данные в следующем формате через xamChart:Инфраструктура xamChart databind datetime column из datatable?

time | v1 | v2 | ... | vn 
-------+-----+-----+- -+----- 
t1  |  |  | ... |  
t2  |  |  | ... | 
... .  .  . ... . 
tm  |  |  | ... | 

Где v1 - vn это время дизайна неизвестные метки (п также неизвестен). t1 - tm - это значения datetime, которые я хочу на оси X. Другая ячейка содержит некоторые цифры.

Мне нужна диаграмма, подобная приведенной ниже, но со временем, как метки оси X, а не только индексы.

xamChart

Вот код, я использую:

foreach (var column in dataTable.Columns.OfType<DataColumn>().Skip(1)) 
{ 
    var s = new Series 
       { 
        DataSource = dataTable, 
        DataMapping = column.ColumnName, 
        ChartType = ChartType.Line, 
        Label = column.ColumnName, 
       }; 

    queriesChart.Series.Add(s); 
} 

ответ

0

Вы можете сделать это с XamDataChart использованием CategoryDateTimeAxis с DataTemplate для этикетки:

<ig:CategoryDateTimeXAxis 
    x:Name="xmXAxis" 
    DateTimeMemberPath="Label" 
    ItemsSource="{Binding}" 
    Label="{StaticResource XAxisLabelTemplate }"> 

DataTemplate:

<DataTemplate x:Key="XAxisLabelTemplate"> 
    <StackPanel Orientation="Vertical"> 
     <TextBlock Text="{Binding Item.Date, Converter={StaticResource igStringFormatConverter}, ConverterParameter=MM/dd/yy}" 
        TextAlignment="Center" Foreground="#CCCCCC" Height="15" Width="65" Margin="0,4,0,0"/>     
     <TextBlock Text="{Binding Item, Converter={StaticResource igStringFormatConverter}, ConverterParameter=T}" 
        TextAlignment="Center" Foreground="#CCCCCC" Height="15" Width="65"/> 
    </StackPanel> 
</DataTemplate> 

Конвертер:

class igStringFormatConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     DateTime dt = (DateTime)value; 
     string fmtDt = String.Format("{0:" + parameter.ToString() + "}", dt);   
     return fmtDt; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
}