【问题标题】:How to show record with multiple children WPF DataGrid?如何显示具有多个子 WPF DataGrid 的记录?
【发布时间】:2012-07-08 20:52:44
【问题描述】:

我有一个要在 DataGrid 中显示的客户对象列表。我已经通过后面的代码绑定了列表:

dataGrid.DataContext = customers;

每位客户都有一个或多个电话号码。我想在客户的行/记录中列出它们。我该怎么做呢? 我的 DataGrid 在 XAML 中如下所示:

<DataGrid AutoGenerateColumns="False" Height="212" IsReadOnly="True"
    HorizontalAlignment="Left" Margin="12,41,0,0" ItemsSource="{Binding}"   
    Name="dataGrid" VerticalAlignment="Top" Width="932">
  <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Path=LastName}" Header="Porting ID"/>
    <DataGridTextColumn Binding="{Binding Path=FirstName}" Header="Operator" />
  </DataGrid.Columns>
</DataGrid>

客户类是:

public class Customer
{
  public String LastName { get; set; }
  public String FirstName { get; set; }
  public List<Phonenumber> PhoneNumbers { get; set; }
}

PhoneNumber 类是:

public class PhoneNumber
{
  public String AreaCode {get;set;}
  public String Number {get;set;}
}

【问题讨论】:

    标签: c# .net wpf datagrid


    【解决方案1】:

    首先请将itemssource 设置为customers 而不是datacontext。现在回答您的问题:您可以使用 DataGridTemplateColumn 并绑定到您的 phonenumbers 集合。这个模板列的数据模板可以是一个简单的项目控件。

    编辑:

                <DataGridTemplateColumn Header="Phonenumbers">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ItemsControl ItemsSource="{Binding Phonenumbers}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="{Binding AreaCode}" Margin="0,0,5,0"/>
                                            <TextBlock Text="{Binding Number}"/>
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
    

    ps:如果您发布代码,我会更新模板;)

    【讨论】:

    • 如果您发布您的客户电话号码代码,我将添加一个示例
    • 查看我更新的原始帖子。如您所见,它有 2 个成员:区号和(订户)号码。
    • 感谢您对一个没有评论的工作示例投反对票! @Henri 我根据您的要求更新我的代码
    • 谢谢,这成功了! (至于为什么有人会否决我的问题,我不知道)。拒绝这是如何工作的:我从哪里得到这背后的理论?我对 WPF 仍然一无所知,尤其是整个绑定的事情(我过去经常使用 Rails,没有“绑定到网格”之类的东西)
    • 刚开始阅读关于 wpf 和 codeproject 或其他博客文章中的绑定。一个简单的答案是,一方面您有一个对象/类/视图模型,您可以在其中定义属性!(这应该是每次的第一步,首先请参阅 MVVM 视图模型:))另一方面,您有您的视图/用户控件在哪里你想将你的属性绑定到。在那里你需要正确的 DATACONTEXT 然后当然是绑定。在查找绑定错误时,vs 输出窗口和诸如 Snoop 之类的工具是您的朋友。至少在这里问一个问题,你会得到你的答案;)
    猜你喜欢
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2020-05-17
    • 2011-11-19
    • 2014-10-05
    • 2013-11-20
    • 2013-03-21
    • 2011-03-12
    相关资源
    最近更新 更多