2

DataGrid に表示したい Customer オブジェクトのリストがあります。コードビハインドを介してリストをバインドしました:

dataGrid.DataContext = customers;

各顧客には 1 つ以上の電話番号があります。顧客の行/レコードにそれらをリストしたいと思います。どうすればこれを行うことができますか?私の 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;}
}
4

1 に答える 1

5

最初に、アイテムソースをデータコンテキストではなく顧客に設定してください。今あなたの質問に: 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: コードを投稿すると、テンプレートが更新されます ;)

于 2012-07-09T13:08:14.033 に答える