如何将对象的列表属性绑定到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很好。我做错了什么?
列的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>