Hi,
try following demo:
XAML:
<Window x:Class="WpfApp1.Window038"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp038"
mc:Ignorable="d"
Title="Dmitriy-2994 Datagrid embedded tables" Height="450" Width="800">
<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding View}"/>
</Grid>
</Window>
And classes:
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Data;
namespace WpfApp038
{
public class ViewModel
{
public ViewModel() =>cvs.Source = GetData();
ObservableCollection<Data> colData = new ObservableCollection<Data>();
CollectionViewSource cvs = new CollectionViewSource();
public ICollectionView View { get => cvs.View; }
private ObservableCollection<Data> GetData()
{
var colISBN = LoadAuthorISBN();
var colAuthors = LoadAuthors();
var colTitles = LoadTitles();
var query = from isbn in colISBN
join author in colAuthors on isbn.AuthorID equals author.AuthorID
join title in colTitles on isbn.ISBN equals title.AuthorISBN
select new Data() { Author = $"{author.FirstName} {author.LastName}", ISBN = isbn.ISBN, Title = title.Title };
return new ObservableCollection<Data>(query);
}
private ObservableCollection<AuthorISBN> LoadAuthorISBN()
{
ObservableCollection<AuthorISBN > col = new ObservableCollection<AuthorISBN>();
for (int i = 1; i < 10; i++) col.Add(new AuthorISBN() { AuthorID = i, ISBN = $"ISBN {i}" });
return col;
}
private ObservableCollection<Authors> LoadAuthors()
{
ObservableCollection<Authors> col = new ObservableCollection<Authors>();
for (int i = 1; i < 10; i++) col.Add(new Authors() { AuthorID = i,FirstName = $"FirstName{i}", LastName = $"LastName{i}" });
return col;
}
private ObservableCollection<Titles> LoadTitles()
{
ObservableCollection<Titles> col = new ObservableCollection<Titles>();
for (int i = 1; i < 10; i++) col.Add(new Titles() { AuthorISBN = $"ISBN {i}", Title=$"Title {i}" });
return col;
}
}
public class Data
{
public string Title { get; set; }
public string ISBN { get; set; }
public string Author { get; set; }
}
internal class AuthorISBN
{
internal int AuthorID { get; set; }
internal string ISBN { get; set; }
}
internal class Authors
{
internal int AuthorID { get; set; }
internal string FirstName { get; set; }
internal string LastName { get; set; }
}
internal class Titles
{
internal string AuthorISBN { get; set; }
internal string Title { get; set; }
}
}
Result: