如何将对象的列表属性绑定到wpf datagridview中的ComboBoxColumn

本文关键字:wpf datagridview 中的 ComboBoxColumn 绑定 属性 对象 列表 | 更新日期: 2023-09-27 18:05:08

下面有一个对象。我有一个名为sourceListofData的列表。

public class StringWrapper
    {
        public string Value { get; set; }
        public int ID { get; set; }
        public string Name { get; set; }
        public List<string> options{ get; set; }
        public StringWrapper(string val)
        {
            this.Value = val;
            this.Name = val;
            options = new List<string>();
            options.Add("test1");
            options.Add("test2");

        }
    }

我的目标是有一个文本列和一个组合框列。文本列显示Value,组合框列将有组合框,它们可以在其中将其源链接到options属性。

以下是我在xaml: 中创建文本框的方法
   <DataGrid
        AutoGenerateColumns="False" ColumnWidth="*"
        CanUserReorderColumns="False" 
        HorizontalAlignment="Left"
        Margin="12,161,0,116"
        Name="dgEditConfig" Width="685"
        ItemsSource="{Binding sourceListOfData}"
        AlternatingRowBackground="#CFFA893D" IsReadOnly="True" HeadersVisibility="Column">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Table Columns" Binding="{Binding Value}"/>

我的想法是,我应该只需要指向StringWrapper的属性,它应该能够确定组合框项,如下所示:

            <DataGridComboBoxColumn ItemsSource="{Binding sourceListOfData}"
                                DisplayMemberPath="Name"
                                SelectedValuePath="ID"
                                SelectedValueBinding="{Binding options }" />

但无论我做什么路径变化,我甚至没有看到一个组合框显示在datagridview上。我看到textboxcolumn很好。我做错了什么?

如何将对象的列表属性绑定到wpf datagridview中的ComboBoxColumn

列的DataContext将是来自DataGrid的ItemsSource的单个项。我猜您将有一个对象列表,您想使用作为组合框的ItemsSource,所以您将需要使用一个RelativeSource绑定,以便获得一个元素的DataContext在可视化树。

<DataGrid>
    <DataGrid.Columns>
        <DataGridComboBoxColumn ItemsSource="{Binding options, RelativeSource={RelativeSource AncestorType=DataGrid}"
                        DisplayMemberPath="Name"
                        SelectedValuePath="ID"
                        SelectedValueBinding="{Binding selectedOption}" />
    </DataGrid.Columns>
</DataGrid>