我有一个绑定到对象PlacementData(PD)的DataGrid。 PD具有属性“P_Unit”。
public class PlacementData
{
public bool PIsChecked { get; set; }
public string PlacementHeader { get; set; }
public string P_NumberOfCases { get; set; }
public int P_Value1 { get; set; }
public int P_Value2 { get; set; }
public int P_Value3 { get; set; }
public int P_Value4 { get; set; }
public int P_Value5 { get; set; }
public string P_Unit { get; set; }
}
在我的DataGrid中,我在DataTemplateColumn中添加了一个Combobox。
<DataGridTemplateColumn x:Name="UnitColumn1" Header="Unit" MinWidth="80" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Text="{Binding P_Unit}">
<ComboBoxItem Content="kg/m3" IsSelected="True"/>
<ComboBoxItem Content="gm/cm3"/>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
在窗口开始时,我将itemsource设置为4行,并添加了标题。
private List<PlacementData> datagrid1CollectionData()
{
List<PlacementData> authors = new List<PlacementData>();
authors.Add(new PlacementData()
{
PlacementHeader = "Based On Injection Rate",
});
authors.Add(new PlacementData()
{
PlacementHeader = "Based On Viscosity"
});
authors.Add(new PlacementData()
{
PlacementHeader = "Based On Sheer Thinning"
});
authors.Add(new PlacementData()
{
PlacementHeader = "k"
});
return authors;
}
dataGrid1.ItemsSource = datagrid1CollectionData();
我的每一行都需要不同的单位组合框值。例如,1行需要“kg,gm”,第2行需要“米,厘米,英尺”,第3行需要“ltr,ml,ton”,&amp;第四个需要它是空白的。
如何设置这些值?我想在每一行创建时,我都可以创建一个List并将其作为itemsource分配给复选框。但是在上面的代码中如何实现这一点。复选框的每一行的复选框项目源???
答案 0 :(得分:2)
我建议使用EditCellTemplate,但这取决于您和任务要求。 在DataTemplate的组合框中使用自定义IValueConverter(我使用了PlacementHeader作为dependand属性,你可以使用实际需要的东西或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();
}
}
要在组合框上实现多选,您可以使用一些开源CheckComboBox。
修改强> 根据您的评论:您可以将转换器添加到数据模板可见的任何位置我直接添加到datatemplate只是为了演示:
<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”必须指向您的DynamicValuesConverter namesapce。