我建议使用 EditCellTemplate 但这取决于您和任务要求。
在 DataTemplate 的组合框中使用自定义 IValueConverter (我已使用 PlacementHeader 作为依赖属性,您可以使用实际需要的内容或 PlacementData 本身):
<ComboBox SelectedValue ="{Binding P_Unit}" ItemsSource="{Binding PlacementHeader, Converter={StaticResource DependedValuesConverter}}">
</ComboBox>
和转换器的一些示例就像想法一样:
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();
}
}
要在组合框上实现多重选择,您可以使用一些开源检查组合框 http://wpftoolkit.codeplex.com/wikipage?title=CheckComboBox.
EDIT根据您的评论:您可以在数据模板可见的任何地方添加转换器,我已直接添加到数据模板只是为了演示:
<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”必须指向您的动态值转换器命名空间。