or
namespace TimelineTest{ public partial class MainWindow : Window { private List<Item> items = new List<Item>(); public MainWindow() { InitializeComponent(); items.Add(new Item() { Date = new DateTime(2014, 5, 5), Duration = TimeSpan.FromHours(5) }); items.Add(new Item() { Date = new DateTime(2014, 5, 5, 14, 18, 22), Duration = TimeSpan.FromHours(5) }); timeline.ItemsSource = items; } public class Item { public TimeSpan Duration { get; set; } public DateTime Date { get; set; } } private void Button_Click(object sender, RoutedEventArgs e) { DateTime now = DateTime.Now; timebar.PeriodStart = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0); timebar.PeriodEnd = new DateTime(now.Year, now.Month, now.Day, 23, 59, 59); } }}<Window x:Class="TimelineTest.MainWindow" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" Title="MainWindow" Height="350" Width="525"> <Grid> <telerik:RadTimeBar Name="timebar" Height="64" Margin="10,0,10,193" PeriodStart="5/5/2014 00:00:00" PeriodEnd="05/5/2014 23:59:59" VerticalAlignment="Bottom" MaxSelectionRange="0:0:10" MinSelectionRange="0:0:10" SelectionTitleFormatString="{}{0:MM-dd-yy HH:mm:ss}"> <telerik:RadTimeBar.Intervals> <telerik:HourInterval IntervalSpans="1,4"/> <telerik:MinuteInterval IntervalSpans="1,5,15,30"/> </telerik:RadTimeBar.Intervals> <telerik:RadTimeBar.Content> <telerik:RadTimeline Name="timeline" Margin="0, -65, 0, 0" PeriodStart="{Binding PeriodStart, ElementName=timebar}" PeriodEnd="{Binding PeriodEnd, ElementName=timebar}" telerik:StyleManager.Theme="Windows8Touch" StartPath="Date" DurationPath="Duration" ScrollMode="None"> <telerik:RadTimeline.Intervals> <telerik:DayInterval IntervalSpans="1"/> </telerik:RadTimeline.Intervals> </telerik:RadTimeline> </telerik:RadTimeBar.Content> </telerik:RadTimeBar> <Button Content="Button" HorizontalAlignment="Left" Margin="125,230,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/> </Grid></Window>class Order { public List<OrderLine> Lines { get; }}class OrderLine {
public int Index { get; } public string Data { get; }}To achieve this, I created a custom column:
public override FrameworkElement CreateCellElement(GridViewCell cell, object dataItem){ // more code to create item etc. item.SetBinding(FrameworkElement.DataContextProperty, new Binding(DataMemberBindingPath) { Source = dataItem });}internal virtual Expression CreateSortKeyExpression(ParameterExpression parameterExpression, ExpressionBuilderOptions options) { var builder = CreateBuilder(parameterExpression, this.EffectiveSortMemberType, this.EffectiveSortMemberPath, options); return builder.CreateMemberAccessExpression(); }<Window x:Class="LabelTemplate_MultiBinding.MainWindow" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:local="clr-namespace:LabelTemplate_MultiBinding" Title="MainWindow" Height="768" Width="1024"> <Grid> <telerik:RadCartesianChart x:Name="PropertyChart"> <telerik:RadCartesianChart.Resources> <local:ChartNumberFormatter x:Key="NumberFormatter"/> <DataTemplate x:Key="FormattedNumericAxisTemplate"> <!-- This uses the converter sending the desired value, and it works fine --> <!--<TextBlock Text="{Binding ., Converter={StaticResource NumberFormatter}}" />--> <!-- This uses the converter sending some value via binding using ElementName, and it works fine --> <!--<TextBlock Text="{Binding Path=DataContext.JustANumber, Converter={StaticResource NumberFormatter}, ElementName=PropertyChart}" />--> <!-- This uses the converter sending the same value as above via binding, but using RelativeSource instead, and it displays incorrectly! --> <TextBlock Text="{Binding Path=DataContext.JustANumber, Converter={StaticResource NumberFormatter}, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadCartesianChart}}}" /> </DataTemplate> </telerik:RadCartesianChart.Resources> <telerik:RadCartesianChart.HorizontalAxis> <telerik:DateTimeCategoricalAxis/> </telerik:RadCartesianChart.HorizontalAxis> <telerik:RadCartesianChart.VerticalAxis> <telerik:LinearAxis LabelTemplate="{StaticResource FormattedNumericAxisTemplate}" /> </telerik:RadCartesianChart.VerticalAxis> <telerik:RadCartesianChart.Series> <telerik:LineSeries CategoryBinding="Date" ValueBinding="Value" ItemsSource="{Binding Path=Series1}"> </telerik:LineSeries> </telerik:RadCartesianChart.Series> </telerik:RadCartesianChart> </Grid></Window>using System;using System.Collections.Generic;using System.Windows;using System.Windows.Data;namespace LabelTemplate_MultiBinding{ public class MyPoint { public DateTime Date { get; set; } public Double Value { get; set; } } public partial class MainWindow : Window { public List<MyPoint> Series1 { get; private set; } public string DisplaySuffix { get; private set; } public double JustANumber { get; private set; } public MainWindow() { Series1 = new List<MyPoint>(); DisplaySuffix = "M"; JustANumber = 50000; for (int i = 0; i < 5; i++) { DateTime date = DateTime.Today.AddDays(i); Series1.Add(new MyPoint() { Date = date, Value = i * 1000 }); } InitializeComponent(); DataContext = this; } } public class ChartNumberFormatter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { double number = System.Convert.ToDouble(value); return number.ToString("N0"); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }}