[英]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.