<Grid> <Grid.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Styles.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Grid.Resources> <telerik:RadDataForm x:Name="DataForm"> <telerik:RadDataForm.ReadOnlyTemplate> <DataTemplate> <TextBox x:Name="textBox" Width="200" ContextMenu="{x:Null}" VerticalAlignment="Top" Margin="141,125,176,0"> <telerik:RadContextMenu.ContextMenu> <telerik:RadContextMenu x:Name="ContextMenuHugo" ItemContainerStyle="{StaticResource MenuItemContainer}" Opening="ContextMenuHugo_OnOpening"> </telerik:RadContextMenu> </telerik:RadContextMenu.ContextMenu> </TextBox> </DataTemplate> </telerik:RadDataForm.ReadOnlyTemplate> </telerik:RadDataForm> <TextBox x:Name="textBox" Width="200" ContextMenu="{x:Null}" VerticalAlignment="Top" Margin="141,125,176,0"> <telerik:RadContextMenu.ContextMenu> <telerik:RadContextMenu x:Name="ContextMenuHugo" ItemContainerStyle="{StaticResource MenuItemContainer}" > </telerik:RadContextMenu> </telerik:RadContextMenu.ContextMenu> </TextBox> </Grid>I want to put some text in the footer of a column in my gridview. However I can't get the binding to work.
I'm using MVVM. I have one viewmodel for the whole form including the gridview (let's call this MainViewModel) and also one viewmodel per row in the gridview (RowViewModel).
The text I want to show in the footer is in MainViewModel (let's call the property FooterText). How can I bind the text of the footer to this property?
My footer looks like this:
<telerikGridView:GridViewDataColumn.Footer> <TextBlock Text="Testing" /></telerikGridView:GridViewDataColumn.Footer>This example works and displays the text "Testing" in the footer. But my problems starts when I try to set the text using binding instead.
This doesn't work:
<telerikGridView:GridViewDataColumn.Footer> <TextBlock Text="{Binding Path=FooterText}" /></telerikGridView:GridViewDataColumn.Footer>
I've tried this:
<telerikGridView:GridViewDataColumn.Footer> <TextBlock Text="{Binding ElementName=LayoutRoot, Path=DataContext.FooterText}" /></telerikGridView:GridViewDataColumn.Footer>LayoutRoot is the Grid that is the root element of the form that the gridview resides in. This does not work. What confuses me is that I can bind the Header of the column in the exact way and it works:
<telerikGridView:GridViewDataColumn Header="{Binding ElementName=LayoutRoot, Path=DataContext.FooterText}" ... >
I've also tried this:
<telerikGridView:GridViewDataColumn.Footer> <TextBlock Text="{Binding Path=DataContext.FooterText, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=telerikGridView:RadGridView}}" /></telerikGridView:GridViewDataColumn.Footer>This didn't work neither.
Any more ideas?
<Window.Resources> <my:MyViewModel x:Key="MyViewModel"/> <Style x:Key="CalendarStyle" TargetType="telerik:RadCalendar" BasedOn="{StaticResource {telerik:ThemeResourceKey ThemeType=telerik:Expression_DarkTheme, ElementType=telerik:RadCalendar}}"> <Setter Property="AreWeekNumbersVisible" Value="False" /> </Style> <Style TargetType="{x:Type telerik:RadDateTimePicker}" BasedOn="{StaticResource {telerik:ThemeResourceKey ThemeType=telerik:Expression_DarkTheme, ElementType=telerik:RadDateTimePicker}}"> <Setter Property="CalendarStyle"> <Setter.Value> <Style BasedOn="{StaticResource CalendarStyle}" TargetType="telerik:RadCalendar"> </Style> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid DataContext="{StaticResource MyViewModel}"> <telerik:RadGridView Grid.Row="0" Name="clubsGrid" ItemsSource="{Binding Clubs}" AutoGenerateColumns="False" Margin="5"> <telerik:RadGridView.Columns> <telerik:GridViewDataColumn DataMemberBinding="{Binding Name}"/> <telerik:GridViewDataColumn DataMemberBinding="{Binding Established}" Header="Est." DataFormatString="{}{0:yyyy/MM/dd}" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding StadiumCapacity}" Header="Stadium" DataFormatString="{}{0:N0}"/> </telerik:RadGridView.Columns> </telerik:RadGridView> </Grid><Window x:Class="TwoDynamic.MainWindow" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <CollectionViewSource x:Key="FirstList" Source="{Binding Path=Series1}"/> <CollectionViewSource x:Key="SecondList" Source="{Binding Path=Series2}"/> <CompositeCollection x:Key="NewList"> <CollectionContainer Collection="{Binding Source={StaticResource FirstList}}" /> <CollectionContainer Collection="{Binding Source={StaticResource SecondList}}" /> </CompositeCollection> </Window.Resources> <Grid> <telerik:RadCartesianChart> <telerik:RadCartesianChart.Resources> <Style TargetType="telerik:LineSeries"> <Setter Property="StrokeThickness" Value="2"/> <Setter Property="Stroke" Value="Blue" /> </Style> <Style TargetType="telerik:BarSeries"> <Setter Property="CombineMode" Value="None"/> </Style> </telerik:RadCartesianChart.Resources> <telerik:RadCartesianChart.VerticalAxis> <telerik:LinearAxis/> </telerik:RadCartesianChart.VerticalAxis> <telerik:RadCartesianChart.HorizontalAxis> <telerik:DateTimeContinuousAxis LabelFitMode="Rotate" LabelFormat="MMM-dd" /> </telerik:RadCartesianChart.HorizontalAxis> <telerik:RadCartesianChart.SeriesProvider> <telerik:ChartSeriesProvider Source="{StaticResource NewList}"> <telerik:ChartSeriesProvider.SeriesDescriptors> <telerik:CategoricalSeriesDescriptor ItemsSourcePath="Data" TypePath="SeriesType" CategoryPath="Date" ValuePath="Value"/> </telerik:ChartSeriesProvider.SeriesDescriptors> </telerik:ChartSeriesProvider> </telerik:RadCartesianChart.SeriesProvider> </telerik:RadCartesianChart> </Grid></Window>namespace TwoDynamic{ public class DataPoint { public DateTime Date { get; set; } public double Value { get; set; } } public class SeriesBase { public ObservableCollection<DataPoint> Data { get; set; } public Type SeriesType { get { return SeriesTypeOverride; } } public virtual Type SeriesTypeOverride { get { return null; } } } public class PointData : SeriesBase { public override Type SeriesTypeOverride { get { return typeof(BarSeries); } } } public class LineData : SeriesBase { public override Type SeriesTypeOverride { get { return typeof(LineSeries); } } } public class ViewModel { private Random _Random = new Random(); public ObservableCollection<SeriesBase> Series1 { get; private set; } public ObservableCollection<SeriesBase> Series2 { get; private set; } public ViewModel() { Series1 = new ObservableCollection<SeriesBase>(); Series1.Add(new PointData() { Data = GenerateSomeData() }); Series1.Add(new PointData() { Data = GenerateSomeData() }); Series2 = new ObservableCollection<SeriesBase>(); Series2.Add(new LineData() { Data = GenerateSomeData() }); Series2.Add(new LineData() { Data = GenerateSomeData() }); } private ObservableCollection<DataPoint> GenerateSomeData() { ObservableCollection<DataPoint> newCollection = new ObservableCollection<DataPoint>(); for (int i = 0; i < 10; i++) newCollection.Add(new DataPoint() { Date = new DateTime(2012, 12, 31).AddDays(i), Value = _Random.Next(100) }); return newCollection; } }}