C#WPF-数据绑定到对象列表的属性

时间:2018-11-29 11:46:16

标签: wpf xaml data-binding

我目前正在C#WPF中学习数据绑定,我正在尝试设置ItemsSource的{​​{1}}属性。

我有课程材料:

DataGridComboBoxColumn

还有一个Datagrid:

public class Material {
    public static List<Material> loadedMaterials;

    static Material() {
        loadedMaterials = new List<Material>();

        loadedMaterials.Add(new Material("TEST1", "", ""));
        loadedMaterials.Add(new Material("TEST2", "", ""));
        loadedMaterials.Add(new Material("TEST3", "", ""));
    }

    public string name { get; set; }
    public string name2 { get; set; }
    public string name3 { get; set; }

    public Material(string n, string n2, string n3) {
        name = n;
        name2 = n2;
        name3 = n3;
    }
}

<DataGrid x:Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="false"> <DataGrid.Columns> <DataGridComboBoxColumn Header="Name" SelectedItemBinding="{Binding name}"/> </DataGrid.Columns> </DataGrid> 已经可以使用,但是现在我正在尝试设置SelectedItemBinding

我想要存储在loadMaterials中的材料的所有名称。

我尝试了以下操作:

ItemsSource

但是下拉列表使用的列表不是获取所有名称的列表,而是第一个“材质”名称具有的每个字符。 (“ T”,“ E”,“ S”,“ T”,“ 1”)

是否有办法从所有//K Refers to The Namespace the Material-Class is in ItemsSource="{Binding Source={x:Static K:Material.loadedMaterials}, Path=name} 中获取所有name,还是我必须创建一个额外的List才能实现?

1 个答案:

答案 0 :(得分:1)

从ItemsSource中删除, Path=name部分。该代码绑定到第一个字符串,将其视为字符数组。

要显示材料的名称,请设置DisplayMemberPath 列中的“名称”或 为DataGridComboBoxColumn创建一个ItemTemplate:

<DataGridComboBoxColumn.CellStyle>
    <Style TargetType="ComboBox">
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding name}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</DataGridComboBoxColumn.CellStyle>