1

我正在尝试创建一个 DataGrid,它将有一行作为列标题,然后再有 10 行,每列都填充有组合框。例如:

    <DataGrid AutoGenerateColumns="False"
                      Name="dataGrid1">
        <DataGrid.Columns>
            <DataGridComboBoxColumn Header="Products" 
    SelectedValueBinding="{Binding ProductName}">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding Path=ProductNamesList, 
                RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding Path=ProductNamesList, 
               RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

            <DataGridComboBoxColumn Header="Amount" />

            <DataGridComboBoxColumn Header="Units" />
        </DataGrid.Columns>
    </DataGrid>

现在,我需要 10 行 3 个组合框。我试过用谷歌搜索它,但我的 Google-Fu 让我失望了,因为我发现告诉我将行绑定到一个列表。我想要的可能吗?还是我应该找到另一种方式?

编辑 1

我想问的是,一旦我有了这个,我怎样才能填充 10 行 3 个组合框?每列将在框中具有相同的项目。

编辑 2

我进行了编辑以表明我已经添加了 Jim 的代码。但是,如果我创建一个ProductNamesList,并用 10 个项目填充它,并将它绑定到我的列,我会得到 10 行空框。

编辑 3

这是List<string>

        var ProductNamesList = new List<string>();
        var test1 = "test1";
        var test2 = "test2";
        var test3 = "test3";
        var test4 = "test4";
        var test5 = "test5";
        var test6 = "test6";
        var test7 = "test7";
        var test8 = "test8";
        var test9 = "test9";
        var test10 = "test10";

        ProductNamesList.Add(test1);
        ProductNamesList.Add(test2);
        ProductNamesList.Add(test3);
        ProductNamesList.Add(test4);
        ProductNamesList.Add(test5);
        ProductNamesList.Add(test6);
        ProductNamesList.Add(test7);
        ProductNamesList.Add(test8);
        ProductNamesList.Add(test9);
        ProductNamesList.Add(test10);

        grid1.ItemsSource = ProductNamesList;
4

1 回答 1

1

只需将组合框列的元素和编辑样式绑定到您的列表。此示例将其绑定到 window.cs 文件中的列表。

public partial class MainWindow : Window
{
    public List<string> ProductNamesList { get; set; }
    public MainWindow()
    {
        InitializeComponent();

        ProductNamesList = new List<string>();

        ProductNamesList.Add("Hamburger");
        ProductNamesList.Add("Uranium");
        ProductNamesList.Add("Toothbrush");
    }
}

<DataGridComboBoxColumn Header="Products" 
    SelectedValueBinding="{Binding ProductName}">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding Path=ProductNamesList, 
                RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding Path=ProductNamesList, 
               RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
于 2013-08-07T15:59:48.780 回答