This question is locked. New answers and comments are not allowed.
                        
                        Hello,
I'm running into a problem when trying to bind data to the RowDetailsTemplate. Specifically my RadGridView ItemsSource is an ObservableCollection<DataRow> based off of the http://demos.telerik.com/silverlight/#GridView/DataSources example. The DataRows contain additional data that I want to bind to the RowDetail. Is this even possible? Below is my code (only three files needed plus the required Telerik references: Controls, Controls.GridView, Controls.Input, and Data).
Thanks for any help!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                I'm running into a problem when trying to bind data to the RowDetailsTemplate. Specifically my RadGridView ItemsSource is an ObservableCollection<DataRow> based off of the http://demos.telerik.com/silverlight/#GridView/DataSources example. The DataRows contain additional data that I want to bind to the RowDetail. Is this even possible? Below is my code (only three files needed plus the required Telerik references: Controls, Controls.GridView, Controls.Input, and Data).
Thanks for any help!
<UserControl x:Class="SilverlightGridViewBinding.MainPage"             xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"             mc:Ignorable="d"             d:DesignHeight="300" d:DesignWidth="400">    <Grid x:Name="LayoutRoot" Background="White">        <telerik:RadGridView x:Name="RadGrid"                             AutoGenerateColumns="False"                             ItemsSource="{Binding Data}"                             ShowGroupPanel="False"                             CanUserReorderColumns="False"                             CanUserSortColumns="False"                             CanUserResizeColumns="False"                             CanUserFreezeColumns="False"                             IsReadOnly="True"                             RowIndicatorVisibility="Collapsed"                             IsFilteringAllowed="False"                             AlternateRowBackground="#FFE6EDFA"                             AlternationCount="2">            <telerik:RadGridView.Columns>                <telerik:GridViewToggleRowDetailsColumn />            </telerik:RadGridView.Columns>            <telerik:RadGridView.RowDetailsTemplate>                <DataTemplate>                    <Grid Background="White">                        <Grid.ColumnDefinitions>                            <ColumnDefinition />                            <ColumnDefinition />                        </Grid.ColumnDefinitions>                        <Grid.RowDefinitions>                            <RowDefinition />                            <RowDefinition />                        </Grid.RowDefinitions>                        <TextBlock Text="Address:" />                        <!-- Binding to Address and Email doesn't work.                               How do you bind the RowDetailsTemplate controls when                              your RadGridView ItemsSource is dynamic (i.e.                              an ObservableCollection<DataRow>)? -->                        <TextBlock Grid.Column="1" Text="{Binding Address}" />                        <TextBlock Grid.Row="1" Text="Email:" />                        <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Email}" />                    </Grid>                </DataTemplate>            </telerik:RadGridView.RowDetailsTemplate>        </telerik:RadGridView>    </Grid></UserControl>using System.Collections.Generic;using System.Collections.ObjectModel;using System.ComponentModel;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using Telerik.Windows.Controls;namespace SilverlightGridViewBinding{    public partial class MainPage : UserControl, INotifyPropertyChanged    {        private ObservableCollection<DataRow> _data;        public MainPage()        {            InitializeComponent();            DataContext = this;            Loaded += MainPage_Loaded;        }        void MainPage_Loaded(object sender, RoutedEventArgs e)        {            GetColumns();        }        /// <summary>        /// GetColumns creates GridViewDataColumns dynamically        /// </summary>        private void GetColumns()        {            var columns = new Dictionary<string, string> { { "UserName", "User Name" }, { "CompanyName", "Company Name" }, { "Id", "Your Id" } };            foreach (KeyValuePair<string, string> kvp in columns)            {                var gridViewDataColumn = new GridViewDataColumn                {                    DataMemberBinding = new Binding(kvp.Key),                    Header = kvp.Value                };                RadGrid.Columns.Add(gridViewDataColumn);            }        }        /// <summary>        /// GetData provides the data for the grid and additional data for the detail record        /// </summary>        /// <returns></returns>        private ObservableCollection<DataRow> GetData()        {            var data = new ObservableCollection<DataRow>();            for (var i = 0; i < 3; i++ )            {                var row = new DataRow();                row["UserName"] = string.Format("User Name {0}", i);                row["CompanyName"] = string.Format("Company Name {0}", i);                row["Id"] = string.Format("{0}", i);                // Add more data to each row than we want to display in the grid                // This data will hopefully be displayed in the row detail                row["Address"] = string.Format("Address {0}", i);                row["Email"] = string.Format("Email {0}", i);                data.Add(row);            }            return data;        }        public ObservableCollection<DataRow> Data        {            get { return _data ?? (_data = GetData()); }        }        public event PropertyChangedEventHandler PropertyChanged;        public void OnPropertyChanged(string property)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(property));            }        }    }}using System.Collections.Generic;using System.ComponentModel;using System.Dynamic;namespace SilverlightGridViewBinding{    /// <summary>    /// This class was copied from Telerik.Windows.Examples.GridView.DataSources.    /// </summary>    public class DataRow : DynamicObject, INotifyPropertyChanged    {        IDictionary<string, object> _data;        public DataRow()        {            _data = new Dictionary<string, object>();        }        public DataRow(IDictionary<string, object> source)        {            _data = source;        }                 public override IEnumerable<string> GetDynamicMemberNames()        {            return _data.Keys;        }        public override bool TryGetMember(GetMemberBinder binder, out object result)        {            result = this[binder.Name];            return true;        }        public override bool TrySetMember(SetMemberBinder binder, object value)        {            this[binder.Name] = value;            return true;        }        public object this[string columnName]        {            get            {                if (_data.ContainsKey(columnName))                {                    return _data[columnName];                }                return null;            }            set            {                if (!_data.ContainsKey(columnName))                {                    _data.Add(columnName, value);                    OnPropertyChanged(columnName);                }                else                {                    if (_data[columnName] != value)                    {                        _data[columnName] = value;                        OnPropertyChanged(columnName);                    }                }            }        }        private void OnPropertyChanged(string propertyName)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));            }        }        #region INotifyPropertyChanged Members        public event PropertyChangedEventHandler PropertyChanged;        #endregion    }}