gpt4 book ai didi

c# - 在不同行中添加具有不同值的 DataGrid 复选框列

转载 作者:行者123 更新时间:2023-11-30 17:03:31 25 4
gpt4 key购买 nike

我得到了一个绑定(bind)到对象 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 行需要“meter、cm、feet”,第 3 行需要“ltr、ml、ton”,第 4 行需要留空。

如何设置这些值?我认为在创建每一行时,我可以创建一个列表并将其作为项目源分配给复选框。但是在上面的代码中这怎么可能。每行复选框的复选框 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 .

编辑根据您的评论:您可以在数据模板可见的任何地方添加转换器我直接添加到数据模板只是为了演示:

                    <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>

“本地”必须指向您的 DynamicValuesConverter 命名空间。

关于c# - 在不同行中添加具有不同值的 DataGrid 复选框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18463243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com