Hi Scott,
in following demo you can see how to bind ComboBoxColumn in DataGrid in UserControl.
XAML MainWindow:
<Window x:Class="Window064"
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:WpfApp1.WpfApp064"
xmlns:uc="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"
mc:Ignorable="d"
Title="Demo ComboBox in UserControl" Height="450" Width="800">
<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>
<Grid>
<uc:Window064UC1/>
</Grid>
</Window>
ViewModel as DataContext in MainWindow (and UserControl), View property for rows in DataGrid, MasterList as Lookup values for ItemsSource in DataGridComboBoxColumn, LoadDemoData for loading data (e.g. EF).
Imports System.Collections.ObjectModel
Imports System.ComponentModel
Namespace WpfApp064
Public Class ViewModel
Public Sub New()
LoadDemoData
End Sub
Private cvsChild As New CollectionViewSource
Private colChild As New ObservableCollection(Of Data)
Public ReadOnly Property View As ICollectionView
Get
Return cvsChild.View
End Get
End Property
Private colMaster As New ObservableCollection(Of Master)
Public ReadOnly Property MasterList As ObservableCollection(Of Master)
Get
Return colMaster
End Get
End Property
Private Sub LoadDemoData()
Dim rnd As New Random
For i = 1 To 10
colMaster.Add(New Master With {.ID = i, .MasterInfo = $"Master {i}"})
Next
For i = 1 To 100
colChild.Add(New Data With {.ID = i, .Info = $"Row {i}", .FKMaster = rnd.Next(1, 11)})
Next
cvsChild.Source = colChild
End Sub
End Class
Public Class Data
Public Property ID As Integer
Public Property FKMaster As Integer
Public Property Info As String
End Class
Public Class Master
Public Property ID As Integer
Public Property MasterInfo As String
End Class
End Namespace
XAML UserControl (no CodeBehind)
<UserControl x:Class="Window064UC1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfControlLibrary1"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.Resources>
<CollectionViewSource x:Key="ItemsCVS" Source="{Binding MasterList}" />
</Grid.Resources>
<DataGrid ItemsSource="{Binding View}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="Info" Binding="{Binding Info}"/>
<DataGridComboBoxColumn Header="Lookup"
ItemsSource="{Binding Source={StaticResource ItemsCVS}}"
DisplayMemberPath="MasterInfo"
SelectedValuePath="ID"
SelectedValueBinding="{Binding FKMaster}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
Result: