DataGrid和ItemsControl实现父与子之间1:N的列表

来源:互联网 发布:ubuntu 被删除文件 编辑:程序博客网 时间:2024/04/29 05:04

页面

xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"      

 

   <ScrollViewer VerticalScrollBarVisibility="Auto">
            <sdk:DataGrid  Name="LayoutRoot" AutoGenerateColumns="False" IsReadOnly="True"  >
                <sdk:DataGrid.Columns>
                    <sdk:DataGridTextColumn Width="40" Header="日期"  Binding="{Binding row}" />
                    <sdk:DataGridTemplateColumn  Width="60" Header="名称">
                        <sdk:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Height="86">
                                    <ItemsControl ItemsSource="{Binding Path=sons}">
                                        <ItemsControl.ItemTemplate>
                                            <DataTemplate>
                                                <TextBlock Margin="6" Text="{Binding  Path=title}"></TextBlock>
                                            </DataTemplate>
                                        </ItemsControl.ItemTemplate>
                                    </ItemsControl>
                                </StackPanel>
                            </DataTemplate>
                        </sdk:DataGridTemplateColumn.CellTemplate>
                    </sdk:DataGridTemplateColumn>
                    <sdk:DataGridTemplateColumn  Width="120" Header="行号">
                        <sdk:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel  Height="86">
                                    <ItemsControl ItemsSource="{Binding Path=sons}">
                                        <ItemsControl.ItemTemplate>
                                            <DataTemplate>
                                                <TextBox Margin="4" Height="20" Text="{Binding Path=rowIndex, Mode=TwoWay}"></TextBox>
                                            </DataTemplate>
                                        </ItemsControl.ItemTemplate>
                                    </ItemsControl>
                                </StackPanel>
                            </DataTemplate>
                        </sdk:DataGridTemplateColumn.CellTemplate>
                    </sdk:DataGridTemplateColumn>
                </sdk:DataGrid.Columns>
            </sdk:DataGrid>
            <!--<ItemsControl  x:Name="LayoutRoot">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Margin="10">
                            <StackPanel>
                                <TextBlock Text="{Binding Path=row}" Width="100" ></TextBlock>
                            </StackPanel>
                            <ItemsControl ItemsSource="{Binding Path=sons}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBox  Text="{Binding Path=title}" Width="200"></TextBox>
                                            <TextBox  Text="{Binding Path=rowIndex}" Width="200"></TextBox>
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>-->
        </ScrollViewer>

 

后台代码

 

   void Loaded(object sender, RoutedEventArgs e)
        {
            var data = new List<rowParent>();
            for (var i = 0; i < 31; i++)
            {
                var p = new rowParent();
                p.row = i;
                p.sons = new List<rowSon>();
                data.Add(p);
                for (var j = 0; j < 3; j++)
                {
                    var s = new rowSon();
                    s.rowIndex = i * 3 + j;
                    s.title = "aaa";
                    p.sons.Add(s);
                }
            }
            LayoutRoot.ItemsSource = data;
        }
        public class rowParent
        {
            public int row { get; set; }
            public List<rowSon> sons { get; set; }
        }
        public class rowSon
        {
            public string title { get; set; }
            public int rowIndex { get; set; }
        }