【问题标题】:Different sized vertical cell widths in a WPF Datagrid controlWPF Datagrid控件中不同大小的垂直单元格宽度
【发布时间】:2010-10-19 22:19:28
【问题描述】:

我有一组要在 WPF 数据网格中显示的 Person 对象。 Person 的类定义是:

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

我想在表格中显示一组 Persons。因为一个人可以有多种最喜欢的食物,所以我希望将所有喜欢的食物放在一个单元格中,垂直堆叠在每个人的“最喜欢的食物”列中。有没有一种简单的方法可以将我的 Person 对象集合绑定到 Datagrid 以完成此操作?

【问题讨论】:

  • 我认为“垂直单元格宽度”是指“单元格高度”。
  • 我不明白我在哪里说的,但是是的,这就是我的意思。

标签: c# wpf datagrid


【解决方案1】:

是的。对“FavoriteFoods”列使用 DataGridTemplateColumn,在模板中,只需使用 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>();
    }
}

【讨论】:

  • 哇,我只需要评论一下这个回复的质量。快速,简洁,是一个完美的例子。谢谢 karmicpuppet。
猜你喜欢
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 2021-05-22
相关资源
最近更新 更多