簡體   English   中英

在不同的行中添加具有不同值的DataGrid checkboxcolumn

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM