[英]Add DataGrid checkboxcolumn with different values in different rows
我有一个绑定到对象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”,第4行需要空白。
如何设置这些值? 我想在每一行创建时,我都可以创建一个List并将其作为itemsource分配给复选框。 但是在上面的代码中如何实现这一点。 每行复选框的复选框项目源???
我建议使用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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.