C # WPF - привязка данных к свойству объекта-списка - PullRequest
0 голосов
/ 29 ноября 2018

В настоящее время я изучаю привязку данных в C # WPF и пытаюсь установить свойство ItemsSource для DataGridComboBoxColumn.

У меня есть материал класса:

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:

<DataGrid x:Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="false">
    <DataGrid.Columns>
        <DataGridComboBoxColumn Header="Name" SelectedItemBinding="{Binding name}"/>
    </DataGrid.Columns>
</DataGrid>

SelectedItemBinding уже работает, но сейчас я пытаюсь установить ItemsSource.

Я хочу все имена Материаловхранится в загруженных материалах.

Я попробовал следующее:

//K Refers to The Namespace the Material-Class is in    
ItemsSource="{Binding Source={x:Static K:Material.loadedMaterials}, Path=name}

Но вместо получения списка всех имен используется список, который используется в раскрывающемся списке, - это каждый символ, который имеет имя первого материала.,(«T», «E», «S», «T», «1»)

Есть ли способ получить все name из всех Materials илиНужно создать дополнительный список, чтобы достичь этого?

1 Ответ

0 голосов
/ 29 ноября 2018

Удалите часть , Path=name из ItemsSource.Код привязывается к первой строке, обрабатывая ее как массив символов.

Чтобы отобразить имя материала, либо установите для DisplayMemberPath столбца значение «name», либо создайте ItemTemplate для DataGridComboBoxColumn:

<DataGridComboBoxColumn.CellStyle>
    <Style TargetType="ComboBox">
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding name}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</DataGridComboBoxColumn.CellStyle>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...