Вертикальная ширина ячейки разных размеров в элементе управления WPF Datagrid - PullRequest
0 голосов
/ 20 октября 2010

У меня есть коллекция объектов Person, которые я хочу отобразить в таблице данных WPF. Определение класса для Person:

class Person {
  string Name;
  int Age;
  List<string> FavoriteFoods;
}

Я хочу отобразить коллекцию людей в таблице. Поскольку у человека может быть несколько любимых блюд, я хочу, чтобы все эти любимые продукты находились в одной ячейке вертикально в столбце «Любимые продукты» для каждого человека. Есть ли простой способ связать мою коллекцию объектов Person с сеткой данных, чтобы выполнить это?

1 Ответ

2 голосов
/ 20 октября 2010

Да.Используйте DataGridTemplateColumn для столбца «FavoriteFoods» и в шаблоне просто используйте ItemsControl для отображения коллекции.Примерно так:

XAML:

<DataGrid x:Name="dg" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
        <DataGridTextColumn Binding="{Binding Age}" Header="Age"/>
        <DataGridTemplateColumn Header="Foods">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding FavoriteFoods}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Код сзади:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        List<Person> persons = new List<Person>();

        Person p1 = new Person() { Name = "Person1", Age = 1 };
        p1.FavoriteFoods.Add("Food1");
        p1.FavoriteFoods.Add("Food2");
        p1.FavoriteFoods.Add("Food3");
        p1.FavoriteFoods.Add("Food4");

        Person p2 = new Person() { Name = "Person2", Age = 2 };
        p2.FavoriteFoods.Add("Food1");
        p2.FavoriteFoods.Add("Food2");

        Person p3 = new Person() { Name = "Person3", Age = 3 };
        p3.FavoriteFoods.Add("Food1");
        p3.FavoriteFoods.Add("Food2");
        p3.FavoriteFoods.Add("Food3");

        persons.Add(p1);
        persons.Add(p2);
        persons.Add(p3);

        dg.ItemsSource = persons;
    }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<string> FavoriteFoods { get; private set;}

    public Person()
    {
        FavoriteFoods = new List<string>();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...