Here is the code. I've actually created a sample code but it reflects the real code exactly. There are two collections: the main collection Customers and the nested (child) collection Orders.
The DataGrid for the Orders collection does not display row selectors.
<Window x:Class="QuickTests.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="210" Width="370"><StackPanel x:Name="CustomersContainer"><TextBlock Text="{Binding Name}" /><DataGrid x:Name="GridTest" CanUserSortColumns="False" CanUserReorderColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" AutoGenerateColumns="True" HeadersVisibility="All" AlternatingRowBackground="WhiteSmoke" VerticalGridLinesBrush="Gray" HorizontalGridLinesBrush="Gray" ItemsSource="{Binding Path=Orders}" SelectionUnit="FullRow" IsEnabled="True" IsReadOnly="False" IsHitTestVisible="True"></DataGrid></StackPanel></Window>
and the corresponding code behind:
using System; using System.Collections.ObjectModel; ObservableCollection using System.ComponentModel; using System.Windows; using System.Windows.Data; namespace QuickTests { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Loaded += new RoutedEventHandler(MainWindow_Loaded); } void MainWindow_Loaded(object sender, RoutedEventArgs e) { CustomersContainer.DataContext = Customer.GetSampleCustomers(); } } public class Customer : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propName)); } } private string name; public string Name { get { return name; } set { name = value; OnPropertyChanged("Name"); } } private ObservableCollection<Order> orders; public ObservableCollection<Order> Orders { // Return the actual collection. get { return orders; } private set { orders = value; } } public static ObservableCollection<Customer> GetSampleCustomers() { ObservableCollection<Customer> customers = new ObservableCollection<Customer>(); ObservableCollection<Order> orders1 = new ObservableCollection<Order> { new Order { DatePlaced=DateTime.Now, Amount=100 }, new Order { DatePlaced=DateTime.Now, Amount=200 }, new Order { DatePlaced=DateTime.Now, Amount=300 } }; customers.Add(new Customer { Name = "Alfki", Orders = orders1 }); ObservableCollection<Order> orders2 = new ObservableCollection<Order> { new Order { DatePlaced=DateTime.Now, Amount=400 }, new Order { DatePlaced=DateTime.Now, Amount=500 }, new Order { DatePlaced=DateTime.Now, Amount=600 } }; customers.Add(new Customer { Name = "Zalambdodont", Orders = orders2 }); return customers; } } public class Order : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propName)); } } private DateTime datePlaced; public DateTime DatePlaced { get { return datePlaced; } set { datePlaced = value; OnPropertyChanged("DatePlaced"); } } private decimal amount; public decimal Amount { get { return amount; } set { amount = value; OnPropertyChanged("Amount"); } } } }
Thanks,
Leszek
Wiki: wbswiki.com
Website: www.wisenheimerbrainstorm.com