I would recommend to use EditCellTemplate but it is up to you and task requirements. In the combobox in the DataTemplate use custom IValueConverter (I have used PlacementHeader as dependand property, you can use what actually needed or PlacementData itself):
<ComboBox SelectedValue ="{Binding P_Unit}" ItemsSource="{Binding PlacementHeader, Converter={StaticResource DependedValuesConverter}}">
</ComboBox>
and some sample of converter just like idea:
public class DynamicValuesConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
switch (value.ToString())
{
case "Based On Injection Rate":
return new[] { "kg/m3", "gm/cm3" };
case "Based On Viscosity":
return new[] { "some other..." };
}
return new string[0];
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
To implement multi selection on combobox you can use some open source CheckComboBox.
EDIT According to your comment: you can add converter anywhere where it is visible to data template I have added directly to datatemplate just to demonstrate:
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DataTemplate.Resources>
<local:DynamicValuesConverter x:Key="DependedValuesConverter" />
</DataTemplate.Resources>
<ComboBox SelectedValue="{Binding P_Unit}" ItemsSource="{Binding PlacementHeader, Converter={StaticResource DependedValuesConverter}}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
"local" has to point to your DynamicValuesConverter namesapce.