DataGrid如何动态添加行详细信息模板

-汪帆- 2016-07-25 10:23:48
Xaml结构如下:

<DataGrid Name="datagrid" RowHeaderWidth="30" Margin="10" ItemsSource="{Binding}" AutoGenerateColumns="False" RowDetailsVisibilityChanged="datagrid_RowDetailsVisibilityChanged" SelectionMode="Single" RowBackground="#FF7BB2AD" AreRowDetailsFrozen="True" MouseDown="datagrid_MouseDown" >
<DataGrid.Columns>
<DataGridTextColumn Header="编号" Binding="{Binding Id}" Width="100" IsReadOnly="True"></DataGridTextColumn>
<DataGridTextColumn Header="姓名" Binding="{Binding Name}" Width="100" IsReadOnly="True"></DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid HeadersVisibility="None" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}" Width="100" IsReadOnly="True"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Name}" Width="100" IsReadOnly="True"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>


数据源结构如下:

public class A
{
private int id;

public int Id
{
get { return id; }
set { id = value; }
}

private string name;

public string Name
{
get { return name; }
set { name = value; }
}

private List<A> aList = new List<A>();

public List<A> AList
{
get { return aList ; }
set { aList = value; }
}
}


由于DataGrid中的展开层级是无限级的,模板DataGrid的下面还可能会有模板,所以在Xaml中写固定的<DataGrid.RowDetailsTemplate>无法满足需求。
如何根据数据源List<A>的情况,动态的增加RowDetailsTemplate?
...全文
827 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
-汪帆- 2016-07-29
  • 打赏
  • 举报
回复

        private DataTemplate CreateDataGridTemplate()
        {
            DataTemplate template = new DataTemplate();

            FrameworkElementFactory dataGridFactory = new FrameworkElementFactory(typeof(DataGrid));

            dataGridFactory.SetValue(DataGrid.AutoGenerateColumnsProperty, true);
            dataGridFactory.SetValue(DataGrid.HeadersVisibilityProperty, DataGridHeadersVisibility.None);
            // 绑定datagrid_RowDetailsVisibilityChanged
            dataGridFactory.AddHandler(?, new EventHandler<DataGridRowDetailsEventArgs>(datagrid_RowDetailsVisibilityChanged));
            template.VisualTree = dataGridFactory; 
            return template;
        }
这个方法可以动态创建模板,但是怎么绑定详细信息展开事件呢
  • 打赏
  • 举报
回复
引用 2 楼 strWangFan 的回复:

        private DataTemplate CreateDataGridTemplate()
        {
            DataTemplate template = new DataTemplate();

            FrameworkElementFactory dataGridFactory = new FrameworkElementFactory(typeof(DataGrid));

            dataGridFactory.SetValue(DataGrid.AutoGenerateColumnsProperty, true);
            dataGridFactory.SetValue(DataGrid.HeadersVisibilityProperty, DataGridHeadersVisibility.None);
            // 绑定datagrid_RowDetailsVisibilityChanged
            dataGridFactory.AddHandler(?, new EventHandler<DataGridRowDetailsEventArgs>(datagrid_RowDetailsVisibilityChanged));
            template.VisualTree = dataGridFactory; 
            return template;
        }
这个方法可以动态创建模板,但是怎么绑定详细信息展开事件呢
dataGridFactory.AddHandler() 里边需要事件参数,具体自己查询。
  • 打赏
  • 举报
回复
在后台遍历,动态初始化DataGrid以及column 添加到 rowDetailsTemplate。 前台的xaml 都可以转成后台。

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧